增加 nginx waf 和 TLS v1.3

/ 0评 / 0

博客建好以后,开始在优化方面着手。陆陆续续看了一些网文之后,发现我之前的配置有很多值得改善的地方,于是又开始重新折腾。
先把分别安置于不同 VPS 的站点给挪到一个地方去,这样我可以一台一台地重新弄。
在做这件事的时候遇到了个问题,故障表现为——登录 A 站点前台显示正常,但是进后台的时候会自动跳转到 B 站点去。后来知道原因是由于两个站点使用了同样的表前缀和启用了 WPJAM Basic 插件的旧版本 object-cache.php 造成的,所以需要:
·1.将两个站点的表前缀修改一下
·2.升级 WPJAM Basic 插件,复制新的 object-cache.php 到 wp-content 文件夹。
第 1 个问题可以用 WPJAM Basic 作者写的一个网页工具完成,第 2 个问题升级到最新的 WPJAM Basic 之后,用新版的 object-cache.php 替换旧版即可。
两个站点位于同一台 VPS 之后,可以开始重新建造 LNMP 环境了。
在 VPS 管理后台重新安装系统之后,照例 SSH 登录 VPS 开始 update 系统,进行 SSH 安全设置,之前的文章有记录,不再赘述。
这次重新建构 LNMP 的时候我踩了很多坑,开始的时候偷懒,想一次搞定 nginx 防火墙和 TLS v1.3 ,所以把所有需要添加的组件都放在 lnmp1.6/src 目录下,并在初次编译的时候就在 lnmp.conf 文件里加了很多模块进去,妄图一次成功以节省时间。结果可能上天故意惩罚我这种偷懒的行为,一次次出错,最后我老实了,什么参数也不加,直接用默认设置安装完 lnmp 后,再用 ./upgrade nginx 来升级 nginx 。
现在记录一下这次重新设置的过程:

yum update -y #更新系统
yum install -y git gcc make build-essential bzip2 wget screen lrzsz firewalld net-tools #安装软件
wget http://soft.vpser.net/lnmp/lnmp1.6beta.tar.gz -cO lnmp1.6beta.tar.gz && tar zxf lnmp1.6beta.tar.gz && cd lnmp1.6 && ./install.sh lnmp #下载 lnmp 1.6 并安装 lnmp

当 lnmp 完成安装之后,再准备模块用以重新编译 nginx 。

cd ~/lnmp1.6/src
#下载 luajit
wget https://github.com/openresty/luajit2/archive/v2.1-20181029.tar.gz
tar xzvf v2.1-20181029.tar.gz
mv luajit2-2.1-20181029 luajit-2.1
#下载 lua-cjson
wget https://github.com/openresty/lua-cjson/archive/2.1.0.7rc1.tar.gz
tar zxvf 2.1.0.7rc1.tar.gz
mv lua-cjson-2.1.0.7rc1/ lua-cjson
#下载 ngx_devel_kit
wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1rc1.tar.gz
tar xzvf v0.3.1rc1.tar.gz
mv ngx_devel_kit-0.3.1rc1 ngx_devel_kit
#下载 lua-nginx-module
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.14rc3.tar.gz
tar zxvf v0.10.14rc3.tar.gz
mv lua-nginx-module-0.10.14rc3/ lua-nginx-module
#下载 cloudflare 修改的 zlib
git clone https://github.com/cloudflare/zlib.git zlib
cd zlib
make -f Makefile.in distclean
cd ..
#下载 pcre
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
tar zxf ./pcre-8.42.tar.gz
cd ..

现在开始编译部分模块

#编译安装 luajit
cd luajit-2.1
make -j2 && make install
echo '/usr/local/lib' >> /etc/ld.so.conf.d/local.conf
ldconfig
#编译安装 lua-cjson
cd ../lua-cjson
export LUA_INCLUDE_DIR=/usr/local/include/luajit-2.1 
make -j2 && make install
#设置环境变量
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1

初次安装完 lnmp 之后,src文件夹下面会有 openssl-1.1.1a 的压缩包和解压后的文件夹,现在给 openssl 打个补丁:

cd ..
git clone https://github.com/hakasenyang/openssl-patch.git
cd openssl-1.1.1a
patch -p1 < ../openssl-patch/openssl-equal-1.1.1a_ciphers.patch
patch -p1 < ../openssl-patch/openssl-1.1.1a-chacha_draft.patch

安装 brotli

cd ..
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli/
git submodule update --init

下载 nginx cache pruge

cd..
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf tar xzf ngx_cache_purge-2.3.tar.gz
mv ngx_cache_purge-2.3.tar.gz ngx_cache_purge

现在修改 lnmp1.6 文件夹下的 lnmp.conf 文件,增加新的模块。

vi ~/lnmp1.6/lnmp.conf
#在 Nginx_Modules_Options='' 里增加以下内容
--with-openssl=../openssl-1.1.1a --with-pcre=../pcre-8.42 --with-pcre-jit --add-module=../lua-nginx-module --add-module=../ngx_devel_kit --add-module=../ngx_brotli --with-zlib=../zlib --add-module=../ngx_cache_purge-2.3

重新编译 nginx ,顺便可以考虑升级到 nginx 的最新版本。

cd ~/lnmp1.6
./upgrade.sh nginx
#根据屏幕提示输入所需升级/降级的 nginx 版本号回车开始执行重新编译,结束后,输入:
nginx -V
#查看修改后的成果。

接下来继续完成防火墙的设置:

cd /usr/local/nginx/conf/
#下载 waf
git clone https://github.com/xzhih/ngx_lua_waf.git waf

cat > /usr/local/nginx/conf/waf.conf << EOF
lua_shared_dict limit 20m;
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/nginx/conf/waf/access.lua";
EOF

mkdir -p /usr/local/nginx/logs/waf
chown www:www /usr/local/nginx/logs/waf
vi nginx.conf
#在 include vhost/*.conf 这行之前加添下面的命令;
include waf.conf;

继续修改 nginx.conf 开启全站 gzip 和 br 压缩支持:

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 6; #默认是 2 级,改成了6级
gzip_types     text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml;
gzip_vary on;
gzip_proxied   any;
gzip_disable   "MSIE [1-6]\.";

brotli  on;
brotli_comp_level 6;
brotli_static on;
brotli_types    text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

接下来需要继续安装插件的,可以继续在lnmp1.6下执行 ./addon.sh 增加插件。
防火墙该开启的端口都开放,比如 80、443 及 ssh 端口。
重启 lnmp 之后,测试一下防火墙的效果,返回下图:
waf.png
现在开启 TLS v1.3 支持。

vi /usr/local/nginx/conf/vhost/你的站点.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; #增加了 TLSv1.3
ssl_prefer_server_ciphers on;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5; #这行是新增加的,添加这行的同时,要注释或者删除掉之前的 ssl_ciphers 行。

现在可以重启 lnmp ,测试效果了。
后记,本来最初的想法是增加 ngx_cache_purge ,用来改善网站打开速度的,顺便把 TLSv1.3 和防火墙的功能增加上,结果最后本末倒置,ngx_cache_purge 装上了没有任何效果。头部信息里始终显示缓存未成功,我又被卡住了。
本文参考了其他博主的文章才得以成功完成,在此对 底噪挖站否 致以谢意!

参考文章:

给你的Nginx加个防火墙
编译Nginx支持TLS1.3
WordPress开启Nginx fastcgi_cache缓存加速方法-Nginx配置实例但遗憾的是我没配置成功

Leave a Reply

Your email address will not be published. Required fields are marked *