降低家用 Web 服务被通报的概率

  • 通过明文协议尝试请求 HTTPS 服务在 Nginx 中有分配特殊的 497 状态码。如果发生该报错,我们希望 Nginx 直接关闭连接,不返回任何响应。这需要用到另外一个非标状态码 444,综合两种状态码,我们需要在 server 中增加如下配置:
error_page 497 @close;

location @close {
    return 444;
}

使用error_page指令为497状态码设置虚拟路径@close,Nginx在处理的@close时发现是返回444状态码,于是直接关闭连接。

这个时候你再用 curl 访问对应的端口就会收到如下报错:

curl http://example.zz.ac:5678 curl: (52) Empty reply from server

server {
        listen 5678 ssl;
        listen [::]:5678 ssl;

        server_name example.zz.ac;

        ssl_certificate ...;
        ssl_certificate_key ..;

        error_page 497 @close;

        location @close {
                return 444;
        }
        ...
}
server {
        listen 5678 ssl default_server;;
        listen [::]:5678 ssl default_server;;

        server_name _;

        ssl_certificate ...;
        ssl_certificate_key ..;

        return 444;
}