首頁 > 軟體

Nginx如何安裝設定Lua支援

2023-09-16 06:01:11

Nginx安裝設定Lua支援

預設情況下Nginx不支援Lua模組,需要安裝LuaJIT直譯器,並且重新編譯Nginx,或者可使用國人開發的openrestry

需要的模組:LuaJIT,Ngx_devellua-nginx-module

Luajit官網:https://luajit.org

1. 環境準備

[root@nginx_lua ~]# yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel

2. 下載最新的luajitngx_devel_kit以及lua-nginx-module解壓

[root@nginx_lua ~]# mkdir -p /soft/src 
[root@nginx_lua ~]# cd /soft/src/
wget https://luajit.org/download/LuaJIT-2.0.4.tar.gz
wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz

3. 解壓ngx_devel_kit以及lua-nginx-module

[root@nginx_lua src]# tar xf v0.2.19.tar.gz
[root@nginx_lua src]# tar xf v0.10.13.tar.gz

4. 編譯安裝LuaJIT,即Lua及時編譯器

[root@nginx_lua src]# tar xf LuaJIT-2.0.4.tar.gz
[root@nginx_lua src]# cd LuaJIT-2.0.4/
[root@nginx_lua LuaJIT-2.0.4]# make && make install

5. 編譯安裝Nginx

[root@nginx_lua src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[root@nginx_lua src]# tar xf nginx-1.14.2.tar.gz
[root@nginx_lua src]# cd nginx-1.14.2
[root@nginx_lua nginx-1.14.2]# ./configure --prefix=/soft/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_dav_module --with-file-aio --with-http_dav_module --add-module=../ngx_devel_kit-0.2.19/ --add-module=../lua-nginx-module-0.10.13/
[root@nginx_lua nginx-1.14.2]# make && make install
[root@nginx_lua nginx-1.14.2]# ln -s /soft/nginx/sbin/nginx /usr/bin/nginx
[root@nginx_lua conf]# vim nginx.conf  #簡單設定寫nginx測試Nginx是否已經支援Lua(lua指令方式)
...
server {
 location /test_lua {
                default_type text/html;
                content_by_lua_block {
                        ngx.say("Hello Lua!") 
                }
        }
...
}
#lua指令方式
#在server 中新增一個localtion
location /hello {
            default_type 'text/plain';
            content_by_lua 'ngx.say("hello, lua")';
        }
#lua檔案方式
#在server 中新增一個localtion
location /lua {
    default_type 'text/html';
    content_by_lua_file conf/lua/test.lua; #相對於nginx安裝目錄
}
#test.lua檔案內容
ngx.say("hello world");
//建立軟連線,如果不建立軟連結,則會出現share object錯誤
[root@nginx_lua conf]# nginx -t
/soft/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
[root@nginx_lua conf]# 
[root@nginx_lua lib64]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
[root@nginx_lua lib64]# ll libluajit-5.1.so.2
lrwxrwxrwx 1 root root 33 Dec 21 20:52 libluajit-5.1.so.2 -> /usr/local/lib/libluajit-5.1.so.2
[root@nginx_lua lib64]#
#//載入lua庫,加入到ld.so.conf檔案(暫時不執行這一步)
#[root@nginx_lua nginx-1.14.2]# echo "/usr/local/LuaJIT/lib" >> /etc/ld.so.conf
[root@nginx_lua conf]# nginx -t
nginx: the configuration file /soft/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /soft/nginx/conf/nginx.conf test is successful
[root@nginx_lua conf]# nginx -s reload

6. 測試安裝Lua成功

Nginx中設定lua指令碼,存取url總是提示404

然後進入nginx的error.log中發現了以下錯誤紀錄檔

2022/06/09 18:31:46 [error] 24475#24475: *5 failed to load external Lua file "/root/lua/68/update_content.lua": cannot open /root/lua/68/update_content.lua: Permission denied, client: 112.4.254.104, server: localhost, request: "GET /api/update_content HTTP/1.1", host: "your host"

然後在nginx.conf中設定

user root root;

再重啟nginx即可

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com