云鎖在安裝的時(shí)候會(huì)自動(dòng)適配nginx版本,,使用我們已經(jīng)預(yù)編譯好的包含防護(hù)模塊的nginx文件替換掉您當(dāng)前系統(tǒng)中使用的nginx文件,。卸載時(shí),,會(huì)將備份的系統(tǒng)原始nginx文件替換回來,。因此,云鎖可保護(hù)使用nginx搭建的網(wǎng)站,開創(chuàng)了這個(gè)領(lǐng)域的先河,。云鎖自動(dòng)適配的是nginx的標(biāo)配設(shè)置,,而且攔截過濾是通過反向代理的形式,在很多時(shí)候nginx的配置都是經(jīng)過調(diào)整修改設(shè)置的,,這就導(dǎo)致無形中反向代理會(huì)額外消耗服務(wù)器系統(tǒng)的資源,,最明顯的就是安裝寶塔面板再裝云鎖后,如果開啟了web防護(hù)功能,,yshttp進(jìn)程會(huì)格外占用系統(tǒng)資源,,往往導(dǎo)致系統(tǒng)負(fù)載過高,這也就是很多人說的寶塔面板與云鎖兼容性不好的原因,。其實(shí)按云鎖官方的nginx自編譯教程來重新編譯一次nginx就可以完美解決問題,。下面我們把教程搬過來,希望能有需要的站友們提供幫助,。
注意:安裝寶塔面板的nginx,,必須是編譯安裝,如果是快速安裝的話,,請(qǐng)重新編譯安裝,。
友情提示
在安裝防護(hù)模塊前先重啟一次Nginx的服務(wù),確保業(yè)務(wù)重啟后可以正常運(yùn)行,,然后再安裝云鎖防護(hù)模塊,。
-
編譯前先將已經(jīng)安裝的Nginx文件進(jìn)行備份,通過ps命令查看nginx文件的路徑,。以下所有步驟都以自身nginx路徑為準(zhǔn)(非寶塔,,但是命令是對(duì)的)。
# ps -elf | grep nginx
# cd /www/server/nginx/sbin/ # cp nginx nginx.bak
-
過步驟1查看的路徑跟-v參數(shù)查看當(dāng)前Nginx版本,,因?yàn)閷毸姘錸ginx已經(jīng)編譯安裝,,路徑可能跟上面不大一樣,
-
由于其默認(rèn)不支持post過濾,,所以需要修改Nginx文件,。1.8.0 版本以下修改源碼目錄下ngx_http_upstream.c文件(Nginx 1.8.0 及以上版本和Tengine跳過該步驟)。在static void ngx_http_upstream_init_request(ngx_http_request_t \*r);行上方添加:int ngx_http_yunsuo_post_in_handler(ngx_http_request_t *r);和在ngx_http_upstream_init_request后,,添加:
if (ngx_http_yunsuo_post_in_handler(r)) { return; }
# cd nginx-1.10.1/src/http/ # vi ngx_http_upstream.c
--------------------下面這段是添加的---------------- int ngx_http_yunsuo_post_in_handler(ngx_http_request_t *r); -------------------------------------------------- static void ngx_http_upstream_init_request(ngx_http_request_t *r) { ngx_str_t *host; ngx_uint_t i; ngx_resolver_ctx_t *ctx, temp; ngx_http_cleanup_t *cln; ngx_http_upstream_t *u; ngx_http_core_loc_conf_t *clcf; ngx_http_upstream_srv_conf_t *uscf, **uscfp; ngx_http_upstream_main_conf_t *umcf; --------------------下面這段是添加的---------------- if (ngx_http_yunsuo_post_in_handler(r)) { return; } -------------------------------------------------- if (r->aio) { return; }
-
下載云鎖防護(hù)模塊壓縮包
# cd /root/ # wget https://codeload.github.com/yunsuo-open/nginx-plugin/zip/master -O nginx-plugin-master.zip
-
解壓云鎖防護(hù)模塊壓縮包nginx-plugin-master.zip
# unzip nginx-plugin-master.zip
-
獲取當(dāng)前云鎖模塊所在目錄的全路徑
# cd nginx-plugin-master/ # pwd
-
查看當(dāng)前nginx加載的模塊,,在編譯加載云鎖防護(hù)模塊的時(shí)候仍需加載這些模塊
# /www/server/nginx/sbin/nginx –V
-
進(jìn)入nginx源碼目錄,對(duì)nginx進(jìn)行編譯,;編譯時(shí)在第8步獲取的nginx原有模塊后添加云鎖防護(hù)模塊,,模塊路徑為第7步獲取的云鎖防護(hù)模塊源碼全路徑“/root/nginx-plugin-master”
# cd nginx-1.10.1/ # ./configure --prefix=/www/server/nginx --with... --add-module=/root/nginx-plugin-master
-
Nginx1.8.0 以上和 Tengine 2.2.0 則需要修改objs/Makefile文件和objs/ngx_modules.c來支持post過濾和內(nèi)容過濾。
首先,,在Makefile文件中的CFLAGS=...-Werror -g后追加宏定義-DHIGHERTHAN8
# vi objs/Makefile CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -DHIGHERTHAN8
其次,,將ngx_modules.c中的&ngx_http_yunsuo_module,向下移動(dòng)到ngx_http_userid_filter_module和ngx_http_headers_filter_module之間,。(已在此之間的則可忽略)
# vi objs/ngx_modules.c
ngx_module_t *ngx_modules[] = { &ngx_core_module, ...... &ngx_http_upstream_keepalive_module, &ngx_http_upstream_zone_module, -----------下面這行向下移動(dòng)---------------- &ngx_http_yunsuo_module, ------------------------------------------ &ngx_http_stub_status_module, ...... &ngx_http_userid_filter_module, ---------------移動(dòng)到該位置----------------- &ngx_http_yunsuo_module, ------------------------------------------- &ngx_http_headers_filter_module, &ngx_http_copy_filter_module, &ngx_http_range_body_filter_module, &ngx_http_not_modified_filter_module, NULL }; char *ngx_module_names[] = { "objs/ngx_modules.c" 186L, 6441C ...... };
-
configure完成后進(jìn)行make(如原本無nginx,make后還需make install)
# make
-
make完成后將系統(tǒng)中原有的nginx用重新編譯生成的nginx文件替換,,替換后重啟nginx使新編譯nginx生效
# rm -rf /www/server/nginx/sbin/nginx # cp objs/nginx /www/server/nginx/sbin/ # service nginx restart
-
到此通過PC端連接到服務(wù)器端,,在PC端的界面上可以看到已識(shí)別nginx插件。
寶塔面板nginx編譯安裝后的路徑一般在:/www/server/nginx/src/
關(guān)于寶塔面板要用到云鎖自編譯web防護(hù)功能的安裝就介紹到這里,,大家如果在編譯過程有中遇到問題可以聯(lián)系小編哦,。