安装OpenResty,实现分发层、应用层nginx+lua开发(附加问题:bad argument #2 to ‘set_keepalive‘ (number expected, got nil)
1. 安装OpenResty
1.1 在 /usr 目录下创建servers目录,并进入该目录执行 yum install -y readline-devel pcre-devel openssl-devel gcc 指令安装第三方库。
1.2 使用 wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz 指令下载Nginx并解压
1.3 进入 ngx_openresty-1.7.7.2/bundle/LuaJIT-2.1-20150120/ 目录使用 make clean && make && make install 安装lua,安装后使用 ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit 指令将luajit指令进行软链接。
1.4 返回bundle目录,下载其它两个依赖并解压,指令如下。
cd /usr/servers/ngx_openresty-1.7.7.2/bundle wget http://github.com/FRICKLE/ngx_cache_purge/archive/2.3.tar.gz tar -zxvf 2.3.tar.gzwget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz tar -zxvf v0.3.0.tar.gz注:当解压v0.3.0.tar.gz压缩包时,最后解压到test目录时会报错,这个错误可不用管,如下图。
1.5 返回nginx主目录 /usr/servers/ngx_openresty-1.7.7.2,执行 ./configure --prefix=/usr/servers --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2
1.6 然后执行 make && make install 指令进行安装
1.7 最后返回到 /usr/servers 目录执行 nginx/sbin/nginx -V 查看版本,结果如下。
1.8 在 /usr/servers 目录执行 nginx/sbin/nginx 指令就启动了nginx
2. nginx配置
2.1 使用 vi /usr/servers/nginx/conf/lua.conf 指令编辑lua.conf文件,添加如下内容。
server {listen 80;server_name _;location /lua {default_type 'text/html';content_by_lua 'ngx.say("hello lhj")';} }2.2 使用 vi /usr/servers/nginx/conf/nginx.conf 指令编辑nginx.conf文件,在http部分添加如下三行内容。
lua_package_path "/usr/servers/lualib/?.lua;;"; lua_package_cpath "/usr/servers/lualib/?.so;;"; include lua.conf;2.3 可使用 nginx/sbin/nginx -t 指令验证是否配置正确,正确结果如下。
2.4 重新启动nginx指令是 /usr/servers/nginx/sbin/nginx -s reload ,启动后浏览器输入IP/lua即可得到输出内容,如下图。
2.5 lua脚本支持内嵌,我们可以在lua.conf中的localtion /lua{}代码块中,使用content_by_lua_file 指令指向某个lua文件,然后相关内容写在那个lua文件即可,如下图。
2.6 查看异常日志指令
tail -f /usr/servers/nginx/logs/error.log
3 分发层nginx的配置
3.1 分发层nginx需要发送http请求给应用层nginx,所以需要安装http相关的依赖,去GitHub这个页面下载依赖,如下图所示。
下载后,把依赖放在 /usr/servers/lualib/resty 目录下,如下所示。
3.2 在分发层nginx中的lua脚本存放目录 /usr/servers/nginx/conf/lua/ 新建一个lua脚本,命名为dis.lua,添加以下代码,实现简单的分发逻辑。
local uri_args = ngx.req.get_uri_args(); local productId = uri_args["productId"];local hosts = {"192.168.56.101", "192.168.56.102"}; local hash = ngx.crc32_long(productId); local index = (hash % 2) + 1; backend = "http://"..hosts[index];local requestPath = uri_args["requestPath"]; requestPath = "/"..requestPath.."?productId="..productIdlocal http = require("resty.http"); local httpc = http.new();local resp, err = httpc:request_uri(backend,{method = "GET",path = requestPath,keepalive = false # 不加这一个参数,会报错bad argument #2 to # 'set_keepalive' (number expected, got nil) })if not resp thenngx.say("request err: ", err);return; endngx.say(resp.body) httpc:close();并在 /usr/servers/nginx/conf/lua.conf 引入该dis.lua文件。
3.3 效果验证,我们在应用层nginx1和nginx2分别写上不同的输出语句,然后通过nginx分发层传入不同的productId哈希后进行分发,效果如下。
4. Nginx的介绍及优点
4.1 Nginx:一款轻量级的Web服务器;①在高并发响应中性能较好,因为是epoll模型,而Apache采用select模型;②反向代理性能强,可实现负载均衡;③内存和CPU占用率。
4.2 负载均衡:在lua.conf中配置upstream代码段,目前upstream支持的分配算法:①轮询(默认方式):每个请求按时间顺序逐一分配到应用服务器;②权重:通过权重,使轮询几率和访问比率成正比;③ip_哈希算法:对每个请求按照访问ip进行hash,可解决session问题(其它解决session方案:a. 在多台服务器上复制;b. 第三方缓存;c. cookie记录session)。
4.3 内存和CPU占用率低:采取分阶段资源分配技术,处理静态文件和无缓存的反向代理加速。
与50位技术专家面对面20年技术见证,附赠技术全景图
总结
以上是生活随笔为你收集整理的安装OpenResty,实现分发层、应用层nginx+lua开发(附加问题:bad argument #2 to ‘set_keepalive‘ (number expected, got nil)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 搭建第一个SpringBoot工程;Sp
- 下一篇: lua脚本简单编辑及常用指令