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

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

安裝環(huán)境

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

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

mkdir-p/usr/servers

cd/usr/servers/

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

apt-getinstall 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序攘。

3茴她、安裝LuaJIT

cd bundle/LuaJIT-2.1-20150120/

make clean&&make&&make install

ln-sf luajit-2.1.0-alpha/usr/local/bin/luajit

4、下載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-xvf2.3.tar.gz

5丈牢、下載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

6梦染、安裝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***?????????????? ?安裝一些內(nèi)置/集成的模塊

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

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

--with-luajit????????????? 集成luajit模塊

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

8朴皆、到/usr/servers目錄下

cd/usr/servers/

ll

會發(fā)現(xiàn)多出來了如下目錄,說明安裝成功

/usr/servers/luajit:luajit環(huán)境泛粹,luajit類似于java的jit遂铡,即即時編譯,lua是一種解釋語言晶姊,通過luajit可以即時編譯lua代碼到機器代碼扒接,得到很好的性能;

/usr/servers/lualib:要使用的lua庫们衙,里邊提供了一些默認的lua庫钾怔,如redis,json庫等蒙挑,也可以把一些自己開發(fā)的或第三方的放在這宗侦;

/usr/servers/nginx :安裝的nginx;

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

7忆蚀、啟動nginx

/usr/servers/nginx/sbin/nginx

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

配置環(huán)境

配置及Nginx HttpLuaModule文檔在可以查看http://wiki.nginx.org/HttpLuaModule矾利。

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模塊

3察皇、為了方便開發(fā)我們在/usr/servers/nginx/conf目錄下創(chuàng)建一個lua.conf

#lua.conf

server{

listen80;

server_name? _;

}

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

include lua.conf;

5泽台、測試是否正常

/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

1什荣、在lua.conf中server部分添加如下配置

location/lua{

default_type'text/html';

content_by_lua'ngx.say("hello world")';

}

2、測試配置是否正確

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

3怀酷、重啟nginx

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

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

hello world

5胰坟、lua代碼文件

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

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

#添加如下內(nèi)容

ngx.say("hello world");

然后lua.conf修改為

location/lua{

default_type'text/html';

content_by_lua_file conf/lua/test.lua;#相對于nginx安裝目錄

}

此處conf/lua/test.lua也可以使用絕對路徑/usr/servers/nginx/conf/lua/test.lua笔横。

6、lua_code_cache

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

location/lua{

default_type'text/html';

lua_code_cache off;

content_by_lua_file conf/lua/test.lua;

}

開啟后reload nginx會看到如下報警

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

7、錯誤日志

如果運行過程中出現(xiàn)錯誤晚碾,請不要忘記查看錯誤日志抓半。

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

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

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

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

example

example.conf???? ---該項目的nginx 配置文件

lua????????????? ---我們自己的lua代碼

test.lua

lualib??????????? ---lua依賴庫/第三方依賴

*.lua

*.so

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

我們將項目放到到/usr/example目錄下。

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

#user? nobody;

worker_processes2;

error_log? logs/error.log;

events{

worker_connections1024;

}

http{

include? ? ? mime.types;

default_type? text/html;

#lua模塊路徑懂诗,其中”;;”表示默認搜索路徑蜂嗽,默認到/usr/servers/nginx下找

lua_package_path"/usr/example/lualib/?.lua;;";#lua 模塊

lua_package_cpath"/usr/example/lualib/?.so;;";#c模塊

include/usr/example/example.conf;

}

通過絕對路徑包含我們的lua依賴庫和nginx項目配置文件。

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

server{

listen80;

server_name? _;

location/lua{

default_type'text/html';

lua_code_cache off;

content_by_lua_file/usr/example/lua/test.lua;

}

}

lua文件我們使用絕對路徑/usr/example/lua/test.lua殃恒。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芋类,隨后出現(xiàn)的幾起案子隆嗅,更是在濱河造成了極大的恐慌,老刑警劉巖侯繁,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胖喳,死亡現(xiàn)場離奇詭異,居然都是意外死亡贮竟,警方通過查閱死者的電腦和手機丽焊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咕别,“玉大人技健,你說我怎么就攤上這事《韫埃” “怎么了雌贱?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長偿短。 經(jīng)常有香客問我欣孤,道長,這世上最難降的妖魔是什么昔逗? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任降传,我火速辦了婚禮,結(jié)果婚禮上勾怒,老公的妹妹穿的比我還像新娘婆排。我一直安慰自己声旺,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布段只。 她就那樣靜靜地躺著腮猖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翼悴。 梳的紋絲不亂的頭發(fā)上缚够,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音鹦赎,去河邊找鬼谍椅。 笑死,一個胖子當著我的面吹牛古话,可吹牛的內(nèi)容都是我干的雏吭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼陪踩,長吁一口氣:“原來是場噩夢啊……” “哼杖们!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肩狂,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摘完,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后傻谁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孝治,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年审磁,在試婚紗的時候發(fā)現(xiàn)自己被綠了谈飒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡态蒂,死狀恐怖畸颅,靈堂內(nèi)的尸體忽然破棺而出改淑,到底是詐尸還是另有隱情,我是刑警寧澤章喉,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布弃衍,位于F島的核電站狱意,受9級特大地震影響亚铁,放射性物質(zhì)發(fā)生泄漏失息。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一募舟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闻察,春花似錦拱礁、人聲如沸琢锋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吴超。三九已至,卻和暖如春鸯乃,著一層夾襖步出監(jiān)牢的瞬間鲸阻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工缨睡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸟悴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓奖年,卻偏偏與公主長得像细诸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陋守,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容