在 Nginx 中正确处理 HTTP 请求发送到 HTTPS 端口

admin
2023-06-04 / 0 评论 / 4 阅读 / 正在检测是否收录...

如果你正在运行一个基于 Nginx 的 web 服务器,可能会遇到一个常见的问题:HTTP 请求被错误地发送到 HTTPS 端口。这可能会发生在不同的场景中,例如当用户直接在浏览器中输入 URL,或者当某个应用错误地发送请求。

在这种情况下,Nginx 会返回一个特殊的 497 错误代码,表示接收到了一个期望的是 HTTPS 的 HTTP 请求。虽然 Nginx 提供了一些用于错误处理的配置选项,但正确地处理这种特定情况需要一些额外的配置步骤。

以下是一个如何配置 Nginx 以正确处理此问题的示例:

server {
    listen 443 ssl;
    server_name store.*;

    include /config/nginx/ssl.conf;
    client_max_body_size 0;

    error_page 497 https://$http_host$request_uri;

    location / {
        resolver 127.0.0.11 valid=30s;
        set $upstream_app 192.168.0.2;
        set $upstream_port 8090;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade-Insecure-Requests 1;
        proxy_set_header X-Forwarded-Proto https;
     }
}

server {
    listen 80;
    server_name store.*;

    location / {
        return 301 https://$http_host$request_uri;
    }
}
0

评论 (0)

取消