关于Lua简介以及Lua的安装可以参考https://blog.csdn.net/IT_10/article/details/89049542
OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。将Lua和Nginx粘合ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合而成。
(1)OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统。
(2)借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单
目前360,UPYUN,阿里云,新浪,腾讯网,去哪儿网,酷狗音乐等都是 OpenResty 的深度用户。在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。
mkdir -p /usr/servers
cd /usr/servers/
yum install gcc-c++
yum install pcre-devel openssl-devel gcc curl
ngx_openresty-xxx/bundle目录里存放着nginx核心和很多第三方模块,比如有我们需要的Lua和LuaJIT。
wget https://openresty.org/download/ngx_openresty-1.9.7.1.tar.gz
tar xvf ngx_openresty-1.9.7.1.tar.gz
cd ngx_openresty-1.9.7.1
cd bundle/LuaJIT-2.1-20151219/
make clean && make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit //生成软链接
该模块用于清理nginx缓存
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
tar -xvf 2.3.tar.gz
该模块用于ustream健康检查
wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
tar -xvf v0.3.0.tar.gz
注意,换目录
cd ..
./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
make && make install
参数说明:
–with*** 安装一些内置/集成的模块
–with-http_realip_module 取用户真实ip模块
-with-pcre Perl兼容的达式模块
–with-luajit 集成luajit模块
–add-module 添加自定义的第三方模块,如此次的ngx_che_purge
到/usr/servers目录下用ll命令查看,会发现多出来了如下目录,说明安装成功
说明:
/usr/servers/luajit :luajit环境,luajit类似于java的jit,即即时编译,lua是一种解释语言,通过luajit可以即时编译lua代码到机器代码,得到很好的性能;
/usr/servers/lualib:要使用的lua库,里边提供了一些默认的lua库,如redis,json库等,也可以把一些自己开发的或第三方的放在这;
/usr/servers/nginx :安装的nginx,通过/usr/servers/nginx/sbin/nginx -V 查看nginx版本和安装的模块。
(1)新建lua.conf,内容如下
cd /usr/servers/nginx/conf
vim lua.conf
server {
listen 80;
server_name _;
location /lua {
default_type 'text/html';
content_by_lua 'ngx.say("hello world")'; #lua调用nginx的API
#上面一行也可以替换成
content_by_lua_file /usr/servers/nginx/html/lua/index.lua; #index.lua是自己写的
#将http://ip/lua的请求交给index.lua文件处理
}
}
(2)编辑nginx.conf配置文件
vim /usr/servers/nginx/conf/nginx.conf
//在http部分添加如下配置
lua_package_path "/usr/servers/lualib/?.lua;;"; #lua 模块
lua_package_cpath "/usr/servers/lualib/?.so;;"; #c模块
include lua.conf; #单独lua配置
#lua模块路径,多个之间”;”分隔,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找
(3)测试是否正常
/usr/servers/nginx/sbin/nginx -t
如果显示如下内容说明配置成功
nginx: the configuration file /usr/servers/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/servers/nginx/conf/nginx.conf test is successful
/usr/servers/nginx/sbin/nginx -s reload
发现报错,出现
nginx: [error] invalid PID number “” in “/usr/local/nginx/logs/nginx.pid”
应该是和我安装的另一个nginx端口也是80有关
解决办法:
第一步:执行命令 killall -9 nginx 杀掉nginx 进程
第二步:执行命令 /usr/servers/nginx/sbin/nginx -c /usr/servers/nginx/conf/nginx.conf 重新加载配置文件
第三步:执行命令 ./nginx -s reload 重新启动nginx
vim打开/usr/lib/systemd/system/nginx.service
内容如下
[Unit]
Description=The nginx process manager
After=network.target remote-fa.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/openresty/nginx/sbin/nginx
ExecReload=/usr/local/openresty/nginx/sbin -s reload
ExecStop=/usr/local/openresty/nginx/sbin -s stop
[Install]
WantedBy=multi-user.target
重启system
systemctl daemon-reload