Nginx 阻止客户端直接访问服务器 IP 地址(空主机)443 端口的方法

Nginx 阻止直接访问 IP 地址 443 端口的方法

  出于安全考虑,通常我们会禁止直接通过 IP 地址访问服务器上的网站,Armstrong 就是这样做的。但这样做有个缺点,无论怎么做,都是要用一个网站做“牺牲者”,这真的是最优解吗?

  我希望 Nginx 直接断开通过 IP 地址而非正确域名访问服务器的客户端,今天我在体验 1Panel 时,发现了他们的实现思路。简单说,1Panel 创建一个默认的 HTTPS 站点,并让 Nginx 拒绝与客户端进行 TLS 握手。下面是代码示例:

# Create an empty variable named viyf_443_empty
map "" $viyf_443_empty {
default "";
}

# Create a default 443 virtual host to block clients that access the server directly via IP address
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_ciphers aNULL;
ssl_certificate data:$viyf_443_empty;
ssl_certificate_key data:$viyf_443_empty;
ssl_reject_handshake on;
}

将如上代码加入到 nginx.conf 中第一个虚拟主机的上面,然后重新加载 Nginx 服务。

温馨提示:
1. 此方法仅能在 Nginx 1.19.4 及更新版本上使用
2. 如果定义了其他的默认站点(在 listen 中指定了 default_server 参数),请取消那些站点的 default_server

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注