###需求以下: 須要在nginx配置文件中判斷請求中是否帶某參數變量,nginx配置自己沒有此判斷功能。html
網上查找資料,能夠在nginx中添加lua模塊,使用lua的腳本去判斷。 比較靠譜的文章:CentOS系統下,如何安裝 nginx_lua_module 模塊 以及 echo-nginx-module 模塊linux
主要安裝:nginx
三個模塊,但找了一圈發現都是須要從新編譯nginx而且覆蓋安裝。git
再次對比我現有的環境:github
網上Google,讓我找到了這篇文章:生產線上的nginx如何添加未編譯安裝模塊 真是欣喜若狂啊,雖然離我真實狀況還有些差距,但已經很接近了。服務器
如下就是個人真實操做步驟:學習
/usr/local
下 以後配置環境變量export LUAJIT_LIB=/usr/local/luajit/lib export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
nginx_lua_module是由淘寶的工程師清無(王曉哲)和春來(章亦春)所開發的nginx第三方模塊,它能將lua語言嵌入到nginx配置中,從而使用lua就極大加強了nginx的能力 ngx_devel_kit-master 是一個拓展nginx服務器核心功能的模塊,第三方模塊開發能夠基於它來快速實現。測試
解壓縮到'/usr/local路徑下'文件夾名爲lua-nginx-module
和ngx_devel_kit
ui
/usr/local/nginx/sbin/.nginx -V
查看現有nginx的配置和版本號,這是我配置完成以後的信息。nginx version: nginx/1.4.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) TLS SNI support enabled configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-ld-opt=-Wl,-rpath, --add-module=/usr/local/ngx_devel_kit --add-module=/usr/local/lua-nginx-module --with-http_stub_status_module --with-http_ssl_module --with-pcre --with-http_realip_module --with-http_image_filter_module
這裏主要是提醒,記住原有的配置,不要在從新配置時丟失之前的配置項。個人版本是1.4.7
因此去官網下個對應版本的nginx源碼。這篇文章Nginx學習筆記(一):Configure命令詳解有講,Configure其實是調用 auto文件夾中的腳本執行,生成objs文件夾,只要把編譯好的nginx覆蓋到原有的就好。 開始操做,把auto
和configure
和src
文件夾拷貝到現有的nginx
文件夾下,以後記得在開始編譯以前,配置下阿里雲
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
是爲了解決在編譯時報的異常
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
執行命令:
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" --add-module=/usr/local/ngx_devel_kit --add-module=/usr/local/lua-nginx-module +原有的配置命令 make
以後停下nginx服務,將現有的nginx程序備份,將新生產的覆蓋,啓動
killall nginx cp ./sbin/nginx ./sbin/nginx.bak cp ./objs/nginx ./sbin/ ./sbin/./nginx
location ^~ /lua { content_by_lua 'if ngx.var.變量名 == nil then return ngx.exit(403) end'; }
能夠拿模擬器試試了,不帶變量時會返回403~~~。
參考文章: CentOS系統下,如何安裝 nginx_lua_module 模塊 以及 echo-nginx-module 模塊 如何安裝nginx_lua_module模塊 生產線上的nginx如何添加未編譯安裝模塊 Nginx學習筆記(一):Configure命令詳解