首页 > 解决方案 > Chrome 似乎正在缓存 307 重定向并且没有端口

问题描述

我有一个网站,并且出于无关紧要的原因(硬约束是另一个进程必须侦听 443),我需要在非标准端口(在本例中为 8443)上托管 https 版本。我想重定向端口 80 上的 http 请求。在我想出以下 nginx 服务器指令之前,我对此进行了一些谷歌搜索,并尝试了很多组合:

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    return 307 https://$host:8443$request_uri;
}

server {
    listen 8443 ssl http2;
    listen [::]:8443 ssl http2;

    server_name example.com www.example.com;
    ssl on;
    error_page  497 https://$server_name:8443$request_uri;
    root /var/www/example.com;

    ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
    include /etc/nginx/snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;

    }
}

现在 - 它有点工作。 http://example.com重定向到https://example.com:8443. 但是正确的重定向只工作一次。在第一次成功重定向后,后续请求在浏览器中被重写,因为https://example.com没有端口。我可以通过清除浏览器缓存再次获得正确的行为,并且可以确认curl -Iv http://www.example.com显示提供了正确的 307 代码和端口。

标签: nginxredirectbrowser-cache

解决方案


推荐阅读