Nginx基于497错误码实现单端口HTTP自动跳转HTTPS

HTTP 状态码 497,“HTTP 请求发送到 HTTPS 端口”,是 Nginx 特有的错误代码。当客户端尝试使用 HTTP 协议连接到预期为 HTTPS 的端口时,Nginx 会返回此错误。此错误表示协议不匹配,服务器拒绝了该请求。

Nginx 配置:

server {
    listen       8442 ssl;
    server_name  localhost;

    ssl_certificate      ssl/test.crt;
    ssl_certificate_key  ssl/test.key;

    location / {
        proxy_pass      http://192.168.1.101:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 捕获SSL协议错误,并重定向到HTTPS
    error_page 497 = @redirect_to_https;
    location @redirect_to_https {
        return 301 https://$host:$server_port$request_uri;
    }
}

通过上述配置,当用户通过 HTTP 协议访问 http://192.168.1.101:8442 时,Nginx 服务器会响应一个 301 重定向,将用户自动引导至 https://192.168.1.101:8442。这种配置不仅提升了安全性,确保所有通信都通过加密的 HTTPS 进行,还优化了用户体验,避免了因协议不匹配而产生的错误。