每个可以正常访问的域名背后都有一个公网IP,但是我们通常都希望用户可以通过DNS解析的域名来对网站进行访问,如果你的网站只是通过80端口访问的话,那么可以在原本的nginx配置文件server段添加如下代码对以IP地址访问你网站的用户返回403代码,例如
server {
listen 80 default;
server_name _;
return 403;
}
# 原来的server段
server {
listen 80;
server_name www.domain.com domain.com;
}
但如果你的端口中还可以通过443端口访问,那么当访问https://your_ip时你的证书域名信息其实都已经被暴露出来了,例如
这样也是不安全的,而NGINX 1.19.4 中添加了一个新的配置项 ssl_reject_handshake 用于拒绝握手,所以我要做的事就是把nginx版本升级到最新版本即可。
我的nginx版本为nginx/1.18.0,查看版本以及当时的配置命令
/usr/local/nginx/sbin/nginx -V
升级测试步骤如下:
# 备份配置文件夹
cd /usr/local/nginx/;tar -zcvf conf.tar.gz conf/
下载最新稳定版nginx
cd /opt/;wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
编译nginx,进行到make即可,不用安装make install,在这里原始nginx仍然可以正常接受请求,不用担心
cd /opt/nginx-1.22.1/
# 从版本信息中获取到的配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-dynamic-module=/opt/ngx_http_geoip2_module-master
# 注意执行完make就可以了
make
复制新的nginx二进制文件替换
# 备份原 nginx 二进制文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx0324.bak
cp /opt/nginx-1.22.1/objs/nginx /usr/local/nginx/sbin/
如果在复制的时候提示下方错误,那么请看一下你是否使用的是复制而非重命名
cp: cannot create regular file '/usr/local/nginx/sbin/nginx': Text file busy
重命名nginx二进制文件并不会导致nginx停止,除非你在此刻重启了nginx,所以放心操作。
测试nginx是否正常运行,以及版本号:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -V
目前我的nginx进程号如下
一切符合预期之后,就可以给nginx发送平滑迁移信号
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
此时,查看pid所在路径可以看到有两个文件,分别对应两个新老nginx进程的PID号码
ls -ilh /usr/local/nginx/logs/nginx.*
从容关闭旧的Nginx进程,可以看到老进程只剩下一条
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
结束工作进程,完成此次升级
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
此时在nginx配置文件中可以添加ssl_reject_handshake功能了,再次添加如下代码:
# 80
server {
listen 80 default;
server_name _;
return 403;
}
# 443
server {
listen 443 default_server;
server_name _;
# 直接拒绝握手
ssl_reject_handshake on;
}
再次以IP访问,可以看见如下内容
参考:
https://zinglix.xyz/2021/10/04/nginx-ssl-reject-handshake/
https://nginx.org/en/download.html
https://zhuanlan.zhihu.com/p/193078620
-TERM, INT: 立刻退出
-QUIT: 等待工作进程忙完结束后再退出
-KILL: 强制终止进程
-HUP: 重新加载配置文件,使用新的配置启动新的工作进程,正常关闭旧的工作进程
-USR1: 重新打开日志文件
-USR2: 执行升级,并启动新的主进程,实现热升级
-WINCH: 逐步关闭工作进程或者说正常关闭工作进程