基于OpenResty部署應用層nginx以及nginx+lua開發hello world

我們這里玩兒nginx,全都會在nginx里去寫lua腳本,因為我們需要自定義一些特殊的業務邏輯

比如說,流量分發,自己用lua去寫分發的邏輯,在分發層nginx里去寫的

再比如說,要用lua去寫多級緩存架構存取的控制邏輯,在應用層nginx里去寫的

后面還要做熱點數據的自動降級機制,也是用lua腳本去寫降級機制的,在分發層nginx里去寫的

因為我們要用nginx+lua去開發,所以會選擇用最流行的開源方案,就是用OpenResty

nginx+lua打包在一起,而且提供了包括redis客戶端,mysql客戶端,http客戶端在內的大量的組件

我們這一講是去部署應用層nginx,會采用OpenResty的方式去部署nginx,而且會帶著大家寫一個nginx+lua開發的一個hello world

1、部署第一個nginx,作為應用層nginx(192.168.31.187那個機器上)

(1)部署openresty

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

yum install -y readline-devel pcre-devel openssl-devel gcc

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

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

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

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

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

cd /usr/servers/
ll

/usr/servers/luajit
/usr/servers/lualib
/usr/servers/nginx
/usr/servers/nginx/sbin/nginx -V

啟動nginx: /usr/servers/nginx/sbin/nginx

(2)nginx+lua開發的hello world

vi /usr/servers/nginx/conf/nginx.conf

在http部分添加:

lua_package_path "/usr/servers/lualib/?.lua;;";
lua_package_cpath "/usr/servers/lualib/?.so;;";

/usr/servers/nginx/conf下,創建一個lua.conf

server {
listen 80;
server_name _;
}

在nginx.conf的http部分添加:

include lua.conf;

驗證配置是否正確:

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

在lua.conf的server部分添加:

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

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

重新nginx加載配置

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

訪問http: http://192.168.31.187/lua

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

ngx.say("hello world");

修改lua.conf

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

查看異常日志

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

(3)工程化的nginx+lua項目結構

項目工程結構

hello
hello.conf
lua
hello.lua
lualib
*.lua
*.so

放在/usr/hello目錄下

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

worker_processes 2;

error_log logs/error.log;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type text/html;

lua_package_path "/usr/hello/lualib/?.lua;;";  
lua_package_cpath "/usr/hello/lualib/?.so;;"; 
include /usr/hello/hello.conf;  

}

/usr/hello/hello.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;  
}  

}

2、如法炮制,在另外一個機器上,也用OpenResty部署一個nginx

大家可能會發現說,有的人可能對nginx也不是太懂,對lua也沒什么了解

對于我的課程來說,主要還是關注,關注的是我們核心的topic,緩存,緩存,緩存,緩存的各種解決方案,大型緩存的架構

那么對于課程里涉及到的各種技術來說,比如nginx,lua腳本

你說讓我給你講成nginx從入門到精通,也不太現實; 講一個lua腳本開發從入門到精通,也不太現實

我只能說,跟著整個項目的思路去走,把項目里涉及的相關技術的知識給你講解一下,然后保證說,帶著你手把手的去做,讓你至少可以學會項目里講解的這些知識,可以做出來

如果你后面真的是要自己去用nginx+lua去做項目,其實個人建議你還是得去查詢和學習一些更多的資料,nginx的一些知識,lua的一些語法

龍果,最受歡迎的一套課程,就是dubbo實戰課程,里面也是dubbo整合了各種技術,active mq,zookeeper,redis 3.0分布式集群,mysql讀寫分離

但是有個問題,每個課程,我相信一個好的課程,它總是可以讓你學到很多知識的

但是任何一個好的課程,它都不是萬能的,dubbo,zookeeper,注冊中心,zookeeper分布式鎖,分布式協調,分布式選舉,等等技術,你學到嗎?

dubbo它也不可能說是給你把zookeeper,redis,mysql全部講解到從入門到精通這樣子

topic,主題,基于dubbo復雜的分布式系統的通用架構,分布式系統,dubbo rpc的調用,服務的開發; zookeeper注冊中心; redis分布式集群; mysql讀寫分離; tomcat集群; hudson持續集成

它告訴你的是一個通用的分布式系統的架構

我這里的也會帶著你做nginx的部署,openresty,nginx+lua的開發,redis集群/高可用/高并發/讀寫分離/持久化/數據備份恢復,zookeeper分布式鎖,kafka去做消息通信,hystrix去做限流

但是任何一個技術都不可能給你從入門到精通講解完

大家可以去關注一下我的es的課程,你如果錄一套課程,基本選擇方向就兩個,要不就是講解技術本身,大量案例實戰貫穿,把技術本身講解的很細致

我之前有兩個es頂尖高手系列的課程,技術課程,把es這個技術講解的非常非常的細致

像我們現在這個課程,大規模緩存,支撐高并發,高性能,海量數據,類似之前dubbo實戰課程,它講解的還是一種架構課程,那么就關注點在整個架構的整體,整合,架構方案,架構設計,架構思想

里面涉及的技術是不可能給你去深入講解的

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容