云锁在安装的时候会自动适配nginx版本,使用我们已经预编译好的包含防护模块的nginx文件替换掉您当前系统中使用的nginx文件。卸载时,会将备份的系统原始nginx文件替换回来。因此,云锁可保护使用nginx搭建的网站,开创了这个领域的先河。云锁自动适配的是nginx的标配设置,而且拦截过滤是通过反向代理的形式,在很多时候nginx的配置都是经过调整修改设置的,这就导致无形中反向代理会额外消耗服务器系统的资源,最明显的就是安装宝塔面板再装云锁后,如果开启了web防护功能,yshttp进程会格外占用系统资源,往往导致系统负载过高,这也就是很多人说的宝塔面板与云锁兼容性不好的原因。其实按云锁官方的nginx自编译教程来重新编译一次nginx就可以完美解决问题。下面我们把教程搬过来,希望能有需要的站友们提供帮助。
注意:安装宝塔面板的nginx,必须是编译安装,如果是快速安装的话,请重新编译安装。
友情提示
在安装防护模块前先重启一次Nginx的服务,确保业务重启后可以正常运行,然后再安装云锁防护模块。
-
编译前先将已经安装的Nginx文件进行备份,通过ps命令查看nginx文件的路径。以下所有步骤都以自身nginx路径为准(非宝塔,但是命令是对的)。
# ps -elf | grep nginx
# cd /www/server/nginx/sbin/ # cp nginx nginx.bak
-
过步骤1查看的路径跟-v参数查看当前Nginx版本,因为宝塔面板nginx已经编译安装,路径可能跟上面不大一样,
-
由于其默认不支持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; }
-
下载云锁防护模块压缩包
# cd /root/ # wget https://codeload.github.com/yunsuo-open/nginx-plugin/zip/master -O nginx-plugin-master.zip
-
解压云锁防护模块压缩包nginx-plugin-master.zip
# unzip nginx-plugin-master.zip
-
获取当前云锁模块所在目录的全路径
# cd nginx-plugin-master/ # pwd
-
查看当前nginx加载的模块,在编译加载云锁防护模块的时候仍需加载这些模块
# /www/server/nginx/sbin/nginx –V
-
进入nginx源码目录,对nginx进行编译;编译时在第8步获取的nginx原有模块后添加云锁防护模块,模块路径为第7步获取的云锁防护模块源码全路径“/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过滤和内容过滤。
首先,在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,向下移动到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, -----------下面这行向下移动---------------- &ngx_http_yunsuo_module, ------------------------------------------ &ngx_http_stub_status_module, ...... &ngx_http_userid_filter_module, ---------------移动到该位置----------------- &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完成后进行make(如原本无nginx,make后还需make install)
# make
-
make完成后将系统中原有的nginx用重新编译生成的nginx文件替换,替换后重启nginx使新编译nginx生效
# rm -rf /www/server/nginx/sbin/nginx # cp objs/nginx /www/server/nginx/sbin/ # service nginx restart
-
到此通过PC端连接到服务器端,在PC端的界面上可以看到已识别nginx插件。
宝塔面板nginx编译安装后的路径一般在:/www/server/nginx/src/
关于宝塔面板要用到云锁自编译web防护功能的安装就介绍到这里,大家如果在编译过程有中遇到问题可以联系小编哦。