返回顶部
首页 > 资讯 > 服务器 >nginx+lua单机上万并发的实现
  • 167
分享到

nginx+lua单机上万并发的实现

2024-04-02 19:04:59 167人浏览 八月长安
摘要

Nginx是我们最常用的服务器,常用于做内容分发和反向代理,lua是一种类C的脚本语言,广泛应用于游戏行业,十年前页游流行的时候,我曾经买过传奇类游戏的源码,游戏中的服务端就是用lu

Nginx是我们最常用的服务器,常用于做内容分发和反向代理,lua是一种类C的脚本语言,广泛应用于游戏行业,十年前页游流行的时候,我曾经买过传奇类游戏的源码,游戏中的服务端就是用lua实现的。我们常用来配合nginx、envoy和Redis做一些简单实用的功能,比如:超卖和少卖、排行榜等,减少请求到达后端java的频率

下面开始构建nginx+lua的镜像,自己构建的原因是怕别人提供的镜像里有病毒,Docker非官方镜像中有很多病毒,这一点大家需要注意

本文采用openresty版本的nginx,具体openresty、nginx和lua的说明大家可以百度一下

构建镜像之前需要先准备好nginx-module-vts模块和openresty-1.15.8.3的压缩包,这两个压缩包百度一下就能找到,我也不知道公众号文章能不能插外链,其中nginx-module-vts这个模块的作用是统计nginx的访问数据,如果自己用prometheus+grafana监控nginx,就需要安装这个模块,我们索性一起编译进来

在服务器上创建目录


cd /usr/local/docker
mkdir -p nginx-lua/build
cd nginx-lua

搭建好之后的完整目录如下:


root@today2:/usr/local/docker/nginx-lua# tree
.
├── build
│   ├── Dockerfile
│   ├── nginx-module-vts.zip
│   └── openresty-1.15.8.3.tar.gz
├── docker-compose.yml
├── lua
│   ├── test.lua
├── nginx.conf
├── wwwroot
│   ├── index.html

Dockerfile

Dockerfile文件放到build目录下,把下载好的nginx-module-vts.zip和openresty-1.15.8.3.tar.gz也放到build目录下


FROM ubuntu:xenial

# 更新数据源
WORKDIR /etc/apt
RUN echo 'deb Http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > sources.list
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> sources.list
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> sources.list
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> sources.list
RUN apt-get update

# 安装依赖
RUN apt-get install unzip make GCc libpcre3-dev libssl-dev perl build-essential curl zlib1g-dev --assume-yes

# 复制工具包
ADD openresty-1.15.8.3.tar.gz /usr/local/src
ADD nginx-module-vts.zip /usr/local/src

# nginx-module-vts
WORKDIR /usr/local/src
RUN unzip nginx-module-vts.zip

WORKDIR /usr/local/src/openresty-1.15.8.3
RUN rm -rf ./Makefile
RUN ./configure --add-module=/usr/local/src/nginx-module-vts
RUN make && make install

# 配置 Nginx,注释掉,在启动容器时挂载到容器中
# ADD nginx.conf /usr/local/openresty/nginx/conf/

WORKDIR /
EXPOSE 80
CMD ["/usr/local/openresty/nginx/sbin/nginx", "-c", "/usr/local/openresty/nginx/conf/nginx.conf", "-g", "daemon off;"]

nginx.conf


user root;
worker_processes  auto;

worker_rlimit_nofile 65535;

events {
 worker_connections  102400;
 use epoll;
}

http {
 server_tokens off;
 include mime.types;
 default_type application/octet-stream;

 #access_log /var/log/nginx/access.log;
 access_log off;
 error_log /var/log/nginx/error.log;

 keepalive_timeout  65;
 client_max_body_size 10m;
 
 gzip on;
 gzip_disable "msie6";
 gzip_min_length 1000;
 gzip_proxied expired no-cache no-store private auth;
 gzip_types text/plain application/xml application/javascript text/CSS application/x-javascript;

 # 下面3行是安装了nginx-module-vts模块后设置nginx流量统计,本文主要讲lua,所以下面3行可以注释掉
 vhost_traffic_status_zone;
 vhost_traffic_status_filter_by_host on;
 vhost_traffic_status_filter_by_set_key $uri uri::$server_name;

 server {
  listen 80;
  root /usr/share/nginx/html;

  # lua脚本是否开启缓存,在调试阶段设为off(修改lua文件后不用重启nginx),在正式环境一定要注释掉这一行,以提高性能
  lua_code_cache off;

  # 这个location是真正调用lua脚本的设置
  location /lua/test {
   # 指定返回的类型是JSON
   default_type 'application/json';
   # 指定访问/lua/test时由test.lua来返回内容,这个路径需要注意是容器中的路径,千万不要和宿主机搞混淆了
   content_by_lua_file '/usr/local/lua/test.lua';
  }

  # 也是流量统计,可以注释掉
  location /status {
   vhost_traffic_status_display;
   vhost_traffic_status_display_fORMat html;
  }

 }
}

docker-compose.yml


version: '3.1'
services:
  nginx:
    build: build # 左边build指的是当前容器需要构建镜像,右边build表示构建镜像的文件在build这个目录下
    restart: always
    container_name: nginx
    network_mode: host # 不一定非要指定host模式,这里只是为了方便
    volumes:
      - ./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
      - ./log:/var/log/nginx/
      - ./wwwroot:/usr/share/nginx/html
      - ./lua:/usr/local/lua

test.lua

在./lua目录下创建test.lua文件


ngx.say('{"code": 1, "msg": "hello world!"}')

启动容器后,访问IP:80/lua/test就可以看到输出了{"code": 1, "msg": "hello world!"},说明lua脚本已经生效

至此nginx+lua已经搭建完毕,在以后的文章中会再介绍一些常用的lua脚本,如:Jwt验证、操作Redis、消息队列等,可以实现很多功能,只要你能想到都可以实现

到此这篇关于nginx+lua单机上万并发的实现的文章就介绍到这了,更多相关nginx lua单机并发内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: nginx+lua单机上万并发的实现

本文链接: https://lsjlt.com/news/127166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nginx+lua单机上万并发的实现
    nginx是我们最常用的服务器,常用于做内容分发和反向代理,lua是一种类C的脚本语言,广泛应用于游戏行业,十年前页游流行的时候,我曾经买过传奇类游戏的源码,游戏中的服务端就是用lu...
    99+
    2024-04-02
  • nginx+lua单机上万并发的实现方法
    小编给大家分享一下nginx+lua单机上万并发的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!nginx是我们最常用的服务器,常用于做内容分发和反向代理...
    99+
    2023-06-15
  • nginx怎么实现高并发
    要实现高并发,可以通过以下几个方面来优化Nginx的性能。1. 使用事件驱动模型:Nginx使用异步事件驱动的模型来处理请求,这使它...
    99+
    2023-08-24
    nginx
  • Nginx+Tomcat怎么实现高并发
    这篇文章给大家分享的是有关Nginx+Tomcat怎么实现高并发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。在Ja...
    99+
    2023-06-28
  • Nginx使用Lua模块实现WAF的原理解析
    目录一、WAF产生的背景二、什么是WAF三、工作原理四、WAF作用五、WAF和传统防火墙的区别六、WAF和DDos七、Nginx WAF功能八、Nginx Waf防护流程九、基于Ng...
    99+
    2024-04-02
  • 简单实现并发:python concur
    可以使用python 3中的concurrent模块,如果python环境是2.7的话,需要下载https://pypi.python.org/packages/source/f/futures/futures-2.1.6.tar.gz#m...
    99+
    2023-01-31
    简单 python concur
  • Nginx内网单机反向代理的实现
    目录1 Nginx安装2 配置Nginx3 修改hosts文件4 测试Nginx内网单机反向代理 Ubuntu18.04虚拟机1 IP:192.168.10.10 Ubuntu18...
    99+
    2024-04-02
  • Java实现简单的万年历
    本文实例为大家分享了Java实现简单万年历的具体代码,供大家参考,具体内容如下 1 要求 1、输入年份; 2、输入月份; 3、输出某年某月的日历。 2 思路 1、实现从控制台接收年和...
    99+
    2024-04-02
  • C++基于reactor的服务器百万并发如何实现
    这篇文章主要介绍“C++基于reactor的服务器百万并发如何实现”,在日常操作中,相信很多人在C++基于reactor的服务器百万并发如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++基于reac...
    99+
    2023-07-02
  • C++基于reactor的服务器百万并发实现与讲解
    目录一、服务器的代码实现与讲解二、环境设置reactor实现的原理请参考:https://www.jb51.net/article/253794.htm本次百万并发的代码实现也是基于...
    99+
    2024-04-02
  • Java怎么实现简单的万年历
    以下是一个简单的Java实现万年历的代码示例:```javaimport java.util.Scanner;public clas...
    99+
    2023-08-15
    Java
  • 如何使用nginx lua实现网站统计中的数据收集
    今天给大家介绍一下如何使用nginx lua实现网站统计中的数据收集。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。各网站站长和运营人员经常使用网站数据分析工具...
    99+
    2023-06-28
  • Nginx中使用Lua脚本与图片的缩略图处理的实现
    目录环境搭建Ubuntu 16.04Ubuntu 18.04图片缩略图环境搭建 Ubuntu 16.04 安装环境的脚本 #!/bin/bash apt-get update...
    99+
    2024-04-02
  • nginx多域名转发的实现
    目录前言基础概念前言 昨天碰到nginx做多域名转发,简单总结下nginx的使用,此文只是便于开发理解,并不会涉入太深的东西。有错误的地方,还望大家多指正。 基础概念 DNS DNS...
    99+
    2023-03-06
    nginx多域名转发 nginx多域名
  • 使用Lvs+Nginx集群搭建高并发架构的实现示例
    目录1. Lvs介绍2. Lvs 负载均衡模式2.1 NAT2.2 TUN2.3 DR模式3. Lvs DR模式配置3.1 Vip配置3.2 LVS集群管理工具安装3.3 地址解析协...
    99+
    2024-04-02
  • nginx进行端口转发的实现
    目录使用场景解决方案使用场景 1、内网有一台服务器的端口需要映射到外网(举例外网的服务器申请了一个域名,然后给该域名做了一个nignx的配置,然后配置中需要访问一个内网的http的服...
    99+
    2023-03-07
    nginx 端口转发
  • Java并发编程中并发机制的底层实现原理是什么
    今天就跟大家聊聊有关Java并发编程中并发机制的底层实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java中的并发机制依赖于JVM的实现和CPU指令,接下来我们深入底层...
    99+
    2023-06-19
  • ASP和LeetCode:如何在路径上实现并发?
    在计算机科学中,并发是一个重要的概念。它指的是在同一时间内处理多个任务的能力。在Web应用程序中,多个用户同时访问同一个页面,就需要实现并发处理。ASP是一种流行的Web开发框架,而LeetCode则是一种流行的算法练习平台。本文将介绍如...
    99+
    2023-09-21
    path leetcode 并发
  • MySQL高并发生成唯一订单号的方法实现
    前言 这篇博文发布后,有朋友问有没有SQL server版本的,现在有了==》传送门 一、场景再现 在一个erp进销存系统或0A等其他系统中,如果多人同时进行生成订单号的操作的话,容易出现多人获得同一个订单号的情况,...
    99+
    2022-05-18
    MySQL高并发生成唯一订单号 MySQL 生成唯一订单号
  • Nginx反向代理转发tomcat的实现
    刚刚接触Nginx,记录下学习过程 先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个翻墙软件,通过翻墙软件才能访问youtube. 翻墙软件就叫做正向代理。 所谓...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作