最近在折腾云锁,按照官方给的方法安装后Nginx一直无法打开Web防护,查阅相关资料后发现Nginx的高版本需要自行加入云锁相关代码后自编译,于是就有了这篇博文
-
1.编译前先将已经安装的Nginx文件进行备份,通过ps命令查看Nginx文件的路径。以下所有步骤都以自身Nginx路径为准。
可以看到Nginx路径为/usr/local/nginx/sbin/nginx ,所在目录就是/usr/local/nginx/sbin/
(宝塔的路径一般在/www/server/nginx/sbin/)
-
2.进入目录
cd /usr/local/nginx/sbin
-
3.备份nginx,也就是将nginx复制为nginx.bak
cp nginx nginx.bak
-
4.进入root用户主目录并下载云锁的防护模块
cd
wget https://codeload.github.com/yunsuo-open/nginx-plugin/zip/master -O nginx-plugin-master.zip
- 5.解压下载的防护模块
unzip nginx-plugin-master.zip
如果这一步提醒未找到unzip的话,Centos执行
yum install unzip -y
Ubuntu执行
apt install unzip -y
- 6.获取当前云锁模块所在目录的全路径
cd nginx-plugin-master
pwd
如果按照流程来的话,路径一般都是/root/nginx-plugin-master
- 7.查询Nginx版本号和所加载的模块
/usr/local/nginx/sbin/nginx -V
(宝塔为 /www/server/nginx/sbin/nginx -V,这里根据第1步得到的路径自行变换)
这个内容需要进行保存,后面会用到 (删除./configure arguents:只留下以后的代码)
-
8.下载Nginx源码,宝塔如果使用的急速安装就卸载掉选择编译安装,源码会在/www/server/nginx/src保存,我没用宝塔,所以要下载Nginx源码
首先进入用户根目录,然后进行下载源码(宝塔用户直接
cd /www/server/nginx/src
,当前步骤就不用执行了)cd wget http://nginx.org/download/nginx-1.18.0.tar.gz
解压ngxin,注意这里后缀为tar.gz,不能使用unzip解压
tar zxvf nginx-1.18.0.tar.gz
- 9.配置configure
进入ngxin源码目录
cd nginx-1.18.0
./configure空格+第7步保存的内容空格+ –-add-module=/root/nginx-plugin-master
我的为
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.7/src/openssl-1.1.1g --with-openssl-opt='enable-weak-ssl-ciphers' --add-module=/root/nginx-plugin-master
- 10.Nginx1.8.0 以上和 Tengine 2.2.0 则需要修改objs/Makefile文件和objs/ngx_modules.c来支持post过滤和内容过滤。
首先,在Makefile文件中的CFLAGS=...-Werror -g后追加宏定义 -DHIGHERTHAN8
可以把文件通过ftp下载下来在本地改,也可以ssh使用vi/vim修改,我这里使用的是vi
vi objs/Makefile
vi里面输入i进入编辑模式
如图加入
按Esc进入命令模式后输入:wq保存并退出
接着编辑objs/ngx_modules.c,也可以通过ftp下载下来修改
vi objs/ngx_modules.c
将&ngx_http_yunsuo_module,向下移动到ngx_http_userid_filter_module和ngx_http_headers_filter_module之间。(已在此之间的则可忽略)
命令模式输入yy复制,dd剪辑,p粘贴,修改后如图,如果没有找到&ngx_http_yunsuo_module,说明之前步骤有问题
命令模式:wq保存
- 11.编译nginx
make(如原本无nginx,make后还需make install)
这里需要漫长的等待
- 12.替换编译完成的nginx
删除以前的nginx
rm -rf /usr/local/nginx/sbin/nginx
宝塔为 rm -rf /www/server/nginx/sbin/nginx
替换nginx
cp objs/nginx /usr/local/nginx/sbin/nginx
宝塔为 cp objs/nginx /www/server/nginx/sbin/nginx
重启nginx服务
service nginx restart
- 13.完成
如何卸载自编译的nginx
cd /usr/local/nginx/sbin/ (宝塔为 cd /www/server/nginx/sbin/ )
rm -rf nginx
mv nginx.bak nginx
service nginx restart