1.前言
最近在折腾云锁,按照官方给的方法安装后Nginx一直无法打开Web防护,查阅相关资料后发现Nginx的高版本需要自行加入云锁相关代码后自编译,于是就有了这篇博文
2.准备
- 1.编译前先将已经安装的Nginx文件进行备份,通过ps命令查看Nginx文件的路径。以下所有步骤都以自身Nginx路径为准。
141002-578347.png
可以看到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
141205-231744.png
- 5.解压下载的防护模块
unzip nginx-plugin-master.zip
如果这一步提醒未找到unzip的话,Centos执行
yum install unzip -y
Ubuntu执行
apt install unzip -y
141319-290506.png
- 6.获取当前云锁模块所在目录的全路径
cd nginx-plugin-master
pwd
141452-628369.png
如果按照流程来的话,路径一般都是/root/nginx-plugin-master
- 7.查询Nginx版本号和所加载的模块
/usr/local/nginx/sbin/nginx -V
(宝塔为 /www/server/nginx/sbin/nginx -V,这里根据第1步得到的路径自行变换)
141504-349353.png
这个内容需要进行保存,后面会用到 (删除./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
141638-354396.png
解压ngxin,注意这里后缀为tar.gz,不能使用unzip解压
tar zxvf nginx-1.18.0.tar.gz
3.编译
- 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
143420-788829.png
vi里面输入i进入编辑模式
如图加入
142659-592521.png
按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,说明之前步骤有问题
143438-130982.png
命令模式: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
143002-266729.png
- 13.完成
143103-15805.png
4.卸载自编译的nginx
cd /usr/local/nginx/sbin/ (宝塔为 cd /www/server/nginx/sbin/ )
rm -rf nginx
mv nginx.bak nginx
service nginx restart