在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 安裝 Nginx+Lua 開發(fā)環(huán)境
Web 開發(fā)實(shí)戰(zhàn)2——商品詳情頁
流量復(fù)制 /AB 測(cè)試/協(xié)程
常用 Lua 開發(fā)庫 1-redis、mysql、http 客戶端
Lua 模塊開發(fā)
常用 Lua 開發(fā)庫 3-模板渲染
HTTP 服務(wù)
Nginx+Lua 開發(fā)入門
安裝 Nginx+Lua 開發(fā)環(huán)境
Redis/SSDB+Twemproxy 安裝與使用
JSON 庫、編碼轉(zhuǎn)換、字符串處理

安裝 Nginx+Lua 開發(fā)環(huán)境

首先我們選擇使用 OpenResty,其是由 Nginx 核心加很多第三方模塊組成,其最大的亮點(diǎn)是默認(rèn)集成了 Lua 開發(fā)環(huán)境,使得 Nginx 可以作為一個(gè) Web Server 使用。借助于 Nginx 的事件驅(qū)動(dòng)模型和非阻塞 IO,可以實(shí)現(xiàn)高性能的 Web 應(yīng)用程序。而且 OpenResty 提供了大量組件如 Mysql、Redis、Memcached 等等,使在 Nginx 上開發(fā)Web 應(yīng)用更方便更簡(jiǎn)單。目前在京東如實(shí)時(shí)價(jià)格、秒殺、動(dòng)態(tài)服務(wù)、單品頁、列表頁等都在使用Nginx+Lua 架構(gòu),其他公司如淘寶、去哪兒網(wǎng)等。

安裝環(huán)境

安裝步驟可以參考 http://openresty.org/#Installation。

創(chuàng)建目錄 /usr/servers,以后我們把所有軟件安裝在此目錄

Java 代碼 收藏代碼

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

安裝依賴(我的環(huán)境是 ubuntu,可以使用如下命令安裝,其他的可以參考 openresty 安裝步驟)

Java 代碼 收藏代碼

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

下載 ngx_openresty-1.7.7.2.tar.gz 并解壓

Java 代碼 收藏代碼

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。

安裝 LuaJIT

Java 代碼 收藏代碼

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

下載 ngx_cache_purge 模塊,該模塊用于清理 nginx 緩存

Java 代碼 收藏代碼

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  

下載 nginx_upstream_check_module 模塊,該模塊用于 ustream 健康檢查

Java 代碼 收藏代碼

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   

安裝 ngx_openresty

Java 代碼 收藏代碼

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*** 安裝一些內(nèi)置/集成的模塊
--with-http_realip_module 取用戶真實(shí) ip 模塊
-with-pcre Perl 兼容的達(dá)式模塊
--with-luajit 集成 luajit 模塊
--add-module 添加自定義的第三方模塊,如此次的 ngx_che_purge

到 /usr/servers 目錄下

Java 代碼 收藏代碼

cd /usr/servers/    
ll   

會(huì)發(fā)現(xiàn)多出來了如下目錄,說明安裝成功
/usr/servers/luajit :luajit 環(huán)境,luajit 類似于 java 的 jit,即即時(shí)編譯,lua 是一種解釋語言,通過 luajit 可以即時(shí)編譯 lua 代碼到機(jī)器代碼,得到很好的性能;
/usr/servers/lualib:要使用的 lua 庫,里邊提供了一些默認(rèn)的 lua 庫,如 redis,json 庫等,也可以把一些自己開發(fā)的或第三方的放在這;
/usr/servers/nginx :安裝的 nginx;

通過 /usr/servers/nginx/sbin/nginx -V 查看 nginx 版本和安裝的模塊

啟動(dòng) nginx

/usr/servers/nginx/sbin/nginx

接下來該配置 nginx+lua 開發(fā)環(huán)境了

配置環(huán)境

配置及 Nginx HttpLuaModule 文檔在可以查看 http://openresty.org/#Installation。

編輯 nginx.conf 配置文件

Java 代碼 收藏代碼

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

在 http 部分添加如下配置

Java 代碼 收藏代碼

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

為了方便開發(fā)我們?cè)?/usr/servers/nginx/conf 目錄下創(chuàng)建一個(gè) lua.conf

Java 代碼 收藏代碼

\#lua.conf  
server {  
    listen       80;  
    server_name  _;  
}  

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

Java 代碼 收藏代碼

include lua.conf;  

測(cè)試是否正常

Java 代碼 收藏代碼

/usr/servers/nginx/sbin/nginx -t

如果顯示如下內(nèi)容說明配置成功

  • 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

HelloWorld

在 lua.conf 中 server 部分添加如下配置

Java 代碼 收藏代碼

location /lua {  
    default_type 'text/html';  
        content_by_lua 'ngx.say("hello world")';  
}  

測(cè)試配置是否正確

Java 代碼 收藏代碼

/usr/servers/nginx/sbin/nginx -t

重啟 nginx

Java 代碼 收藏代碼

/usr/servers/nginx/sbin/nginx -s reload

訪問如 http://192.168.1.6/lua(自己的機(jī)器根據(jù)實(shí)際情況換 ip),可以看到如下內(nèi)容

hello world

lua 代碼文件

我們把 lua 代碼放在 nginx 配置中會(huì)隨著 lua 的代碼的增加導(dǎo)致配置文件太長(zhǎng)不好維護(hù),因此我們應(yīng)該把 lua 代碼移到外部文件中存儲(chǔ)。

Java 代碼 收藏代碼

vim /usr/servers/nginx/conf/lua/test.lua    

Java 代碼 收藏代碼

\#添加如下內(nèi)容  
ngx.say("hello world");   

然后 lua.conf 修改為

Java 代碼 收藏代碼

location /lua {  
    default_type 'text/html';  
    content_by_lua_file conf/lua/test.lua; #相對(duì)于nginx安裝目錄  
}    

此處 conf/lua/test.lua 也可以使用絕對(duì)路徑 /usr/servers/nginx/conf/lua/test.lua。

lua_code_cache

默認(rèn)情況下 lua_code_cache 是開啟的,即緩存 lua 代碼,即每次 lua 代碼變更必須reload nginx 才生效,如果在開發(fā)階段可以通過 lua_code_cache off;關(guān)閉緩存,這樣調(diào)試時(shí)每次修改 lua 代碼不需要 reload nginx;但是正式環(huán)境一定記得開啟緩存。

Java 代碼 收藏代碼

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

開啟后 reload nginx 會(huì)看到如下報(bào)警

nginx: [alert] lua_code_cache is off; this will hurt performance in /usr/servers/nginx/conf/lua.conf:8

錯(cuò)誤日志

如果運(yùn)行過程中出現(xiàn)錯(cuò)誤,請(qǐng)不要忘記查看錯(cuò)誤日志。

Java 代碼 收藏代碼

tail -f /usr/servers/nginx/logs/error.log  

到此我們的基本環(huán)境搭建完畢。

nginx+lua 項(xiàng)目構(gòu)建

以后我們的 nginx lua 開發(fā)文件會(huì)越來越多,我們應(yīng)該把其項(xiàng)目化,已方便開發(fā)。項(xiàng)目目錄結(jié)構(gòu)如下所示:

example

example.conf     ---該項(xiàng)目的nginx 配置文件
lua              ---我們自己的lua代碼
  test.lua
lualib            ---lua依賴庫/第三方依賴
  *.lua
  *.so

其中我們把 lualib 也放到項(xiàng)目中的好處就是以后部署的時(shí)候可以一起部署,防止有的服務(wù)器忘記復(fù)制依賴而造成缺少依賴的情況。

我們將項(xiàng)目放到到 /usr/example 目錄下。

/usr/servers/nginx/conf/nginx.conf 配置文件如下(此處我們最小化了配置文件)

Java 代碼 收藏代碼

\#user  nobody;  
worker_processes  2;  
error_log  logs/error.log;  
events {  
    worker_connections  1024;  
}  
http {  
    include       mime.types;  
    default_type  text/html;  

    #lua模塊路徑,其中”;;”表示默認(rèn)搜索路徑,默認(rèn)到/usr/servers/nginx下找  
    lua_package_path "/usr/example/lualib/?.lua;;";  #lua 模塊  
    lua_package_cpath "/usr/example/lualib/?.so;;";  #c模塊  
    include /usr/example/example.conf;  
}    

通過絕對(duì)路徑包含我們的 lua 依賴庫和 nginx 項(xiàng)目配置文件。

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

Java 代碼 收藏代碼

server {  
    listen       80;  
    server_name  _;  

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

lua 文件我們使用絕對(duì)路徑 /usr/example/lua/test.lua。

到此我們就可以把 example 扔 svn 上了。