在Nginx中,访问https://ip 时,服务器会返回第一个已经配置了域名的站点。这会造成源站IP泄露。

以Nginx 1.19.4以上的版本中,使用以下配置,直接访问IP或者不存在的server_name,服务器会返回错误信息SSL_ERROR_UNRECOGNIZED_NAME_ALERT,而不是返回配置文件中第一个https网站。

server {
    listen               443 ssl default_server;
    ssl_reject_handshake on;
}

server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     example.com.crt;
    ssl_certificate_key example.com.key;
}

Nginx 直接返回字符串、状态码

server{
    listen 80 ssl;
    server_name _;
    # 可以直接返回一个状态码:400 403 401 500
    return 500;
    # 也可以返回一个字符串
    default_type text/html;
    return 200 'Nothing to see here.';  
    # 当然,也可以指定一个目录
    root /home/wwwroot/default;
}

参考链接:

  1. http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake