1. 程式人生 > >搭建OpenResty(Nginx+Lua)

搭建OpenResty(Nginx+Lua)

編寫 package out cati 文章 環境 adl forward perl

這篇文章是一個多月前寫的,當時之所以搭建這個是為了最大程度上發揮Nginx的高並發效率(主要是結合lua腳本),參考的話,主要參考張開濤先生寫的跟開濤學Nginx+lua系列文章,地址為:https://jinnianshilongnian.iteye.com/blog/2190344

當時本人按照張開濤寫的一步一步搭建,當然了也發現一些小問題,所以在此將其發表出去,另外強調一點,開發人員無論是平時編寫代碼或者是調研新技術或者實踐,最好也寫寫文檔總結一下。

我寫文檔的主要目的,一來讓自己思路更加清晰,二來為博文積累素材,三來這是一個秘密。

下面進入正題吧

1.創建目錄/usr/servers

mkdir -p /usr/servers  
cd /usr/servers/  

2.安裝依賴(不同的系統環境需要以不同的方式安裝依賴,具體可以參考該地址: //openresty.org/#Installation)

apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl  

3.下載ngx_openresty-1.7.7.2.tar.gz並解壓

wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz  
tar -xzvf ngx_openresty-1.7.7.2.tar.gz  

ngx_openresty-1.7.7.2/bundle目錄裏存放著nginx核心和很多第三方模塊,比如有我們需要的Lua和LuaJIT

4.安裝LuaJIT

cd bundle/LuaJIT-2.1-20150120/  
make clean && make && make install  
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit 

5.下載ngx_cache_purge模塊,該模塊用於清理nginx緩存

cd /usr/servers/ngx_openresty-1.7.7.2/bundle  
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz  
tar -xvf 2.3.tar.gz 

6.下載nginx_upstream_check_module模塊,該模塊用於ustream健康檢查

cd /usr/servers/ngx_openresty-1.7.7.2/bundle  
wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz  
tar -xvf v0.3.0.tar.gz 

7.安裝ngx_openresty

cd /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  
make && make install  

--with*** 安裝一些內置/集成的模塊

--with-http_realip_module 取用戶真實ip模塊

-with-pcre Perl兼容的達式模塊

--with-luajit 集成luajit模塊

--add-module 添加自定義的第三方模塊,如此次的ngx_che_purge

8.啟動nginx

/usr/servers/nginx/sbin/nginx

9.配置nginx+lua開發環境

(1) 編輯nginx.conf配置文件

vim /usr/servers/nginx/conf/nginx.conf 

(2)在http部分添加如下配置

#lua模塊路徑,多個之間”;”分隔,其中”;;”表示默認搜索路徑,默認到/usr/servers/nginx下找  
lua_package_path "/usr/servers/lualib/?.lua;;";  #lua 模塊  
lua_package_cpath "/usr/servers/lualib/?.so;;";  #c模塊   

技術分享圖片

其實之所以編寫example.conf,是考慮Nginx+Lua開發文件會越來越多,如果全部擠在nginx文件下的話,不利於管理和維護。

/usr/example/example.conf配置文件如下 :

server {
    listen       80;
    server_name  _;

    location /lua {
        default_type ‘text/html‘;
        lua_code_cache off;
        content_by_lua_file /usr/example/lua/test.lua;
    }
}
   

test.lua內容如下:

ngx.say("hello world");

重啟Nginx在瀏覽器輸入:http://IP/lua,出現hello world表示成功

例如:

技術分享圖片

最後完整的nginx.conf文件如下:

#user  nobody;
worker_processes  2;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {

    include       mime.types;
    default_type  application/octet-stream;
    #lua模塊路徑,多個之間”;”分隔,其中”;;”表示默認搜索路徑,默認到/usr/servers/nginx下找  
    lua_package_path "/usr/servers/lualib/?.lua;;";  #lua 模塊  
    lua_package_cpath "/usr/servers/lualib/?.so;;";  #c模塊   
    include /usr/example/example.conf;
    #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
    #                  ‘$status $body_bytes_sent "$http_referer" ‘
    #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


     server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
                                        

搭建OpenResty(Nginx+Lua)