Nginx Lua 环境搭建

Nginx Lua 环境搭建

Nginx Lua 环境搭建

安装

官方安装文档:http://openresty.org/cn/linux-packages.html#centos
以centos举例:

1
2
3
4
5
6
7
8
9
10
11
# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/

# update the yum index:
sudo yum check-update

#然后就可以像下面这样安装软件包,比如 openresty:
sudo yum install -y openresty
#安装命令行工具 resty,那么可以像下面这样安装 openresty-resty 包:
sudo yum install -y openresty-resty

源码编译安装:

先去官网下载源码包:http://openresty.org/cn/download.html,安装指导:http://openresty.org/cn/installation.html

1
2
3
4
5
6
7
8
9
yum install -y pcre-devel openssl-devel gcc curl
mkdir -p /data/pkg/ && cd /data/pkg/
#最新的为21年8月 https://openresty.org/download/openresty-1.19.9.1.tar.gz
wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
tar xf openresty-1.15.8.2.tar.gz
cd openresty-1.15.8.2
./configure --prefix=/usr/local/openresty --with-luajit --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_stub_status_module
make -j$nproc
make install

默认安装路径/usr/local/openresty,想更改路径通过–prefix=/path指定。

至此,OpenResty安装完成,可以尝试启动:

1
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf -p /usr/local/openresty/nginx/

Hello World示例

1
2
3
4
5
6
7
8
9
10
11
cd /usr/local/openresty
mkdir nginx/conf/lua

vim nginx/conf/lua/echo.lua

local action = ngx.var.request_method
if(action == "POST") then
ngx.say("Method: POST; Hello world")
elseif(action == "GET") then
ngx.say("Method: GET; Welcome to the web site")
end
1
2
3
location /echo {
content_by_lua_file "conf/lua/echo.lua";
}

Nginx Lua 开发环境搭建

1. 编辑nginx.conf配置文件

1
vi /usr/local/openresty/nginx/conf/nginx.conf

2.在http部分添加如下配置

1
2
3
4
5
#lua模块路径,多个之间”;”分隔,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找  

lua_package_path "/usr/local/openresty/lualib/?.lua;;"; #lua 模块

lua_package_cpath "/usr/local/openresty/lualib/?.so;;"; #c 模块

3.为了方便开发在/opt/openresty/nginx/conf目录下创建一个lua.conf

1
2
3
4
5
#lua.conf
server {
listen 80;
server_name _;
}

4 在nginx.conf中的http部分添加include lua.conf包含此文件片段

1
include lua.conf;

5. 测试是否正常

1
/usr/local/openresty/nginx/sbin/nginx -t

6. lua_code_cache

默认情况下lua_code_cache 是开启的,即缓存lua代码,即每次lua代码变更必须reload nginx才生效,如果在开发阶段可以通过lua_code_cache off;关闭缓存,这样调试时每次修改lua代码不需要reload nginx;但是正式环境一定记得开启缓存。

1
2
3
4
5
6
7
8
9
10
#lua.conf
server {
listen 80;
server_name _;
location /lua {
default_type 'text/html';
lua_code_cache off;
content_by_lua_file conf/lua/test.lua; #相对于nginx安装目录
}
}

开启后reload nginx会看到如下报警
nginx: [alert] lua_code_cache is off; this will hurt performance in /opt/openresty/nginx/conf/lua.conf:7

7. 错误日志

如果运行过程中出现错误,请不要忘记查看错误日志。

1
tail -f /opt/openresty/nginx/logs/error.log

到此,基本环境搭建完毕。

nginx+lua项目构建

以后我们的nginx lua开发文件会越来越多,我们应该把其项目化,已方便开发。项目目录结构如下所示:

1
2
3
4
5
6
7
OpenResty
--openResty.conf ---该项目的nginx 配置文件
--lua ---我们自己的lua代码
----test.lua
--lualib ---lua依赖库/第三方依赖
----*.lua
----*.so

其中我们把lualib也放到项目中的好处就是以后部署的时候可以一起部署,防止有的服务器忘记复制依赖而造成缺少依赖的情况。
我们将项目放到到/usr/openResty目录下。

nginx.conf配置文件修改includ的conf文件,修改为我们项目中的conf,同时修改引入lualib的地址

1
2
3
4
5
#lua模块路径,多个之间”;”分隔,其中”;;”表示默认搜索路径,默认到/usr/servers/nginx下找  
lua_package_path "/usr/openResty/lualib/?.lua;;"; #lua 模块
lua_package_cpath "/usr/openResty/lualib/?.so;;"; #c 模块

include /usr/openResty/openResty.conf;

通过绝对路径包含我们的lua依赖库和nginx项目配置文件。
/usr/openResty/openResty.conf的内容如下:

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
server_name _;

location /lua {
default_type 'text/html';
lua_code_cache off;
content_by_lua_file /usr/openResty/lua/test.lua;
}
}

ua文件我们使用绝对路径/usr/openResty/lua/test.lua

到此,整个openResty就可以扔到github上了


 
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×