小编Chr*_*att的帖子

防止 nginx 在用作反向代理时将流量从 https 重定向到 http

这是我的缩写 nginx vhost conf:

upstream gunicorn {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    listen 80;
    listen 443 ssl;
    server_name domain.com ~^.+\.domain\.com$;

    location / {
        try_files $uri @proxy;
    }

    location @proxy {
        proxy_pass_header Server;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 120;
        proxy_pass http://gunicorn;
    }
}
Run Code Online (Sandbox Code Playgroud)

同一台服务器需要同时提供 HTTP 和 HTTPS 服务,但是,当上游发出重定向(例如,在处理表单之后)时,所有 HTTPS 请求都将重定向到 HTTP。我发现唯一可以解决此问题的方法是更改proxy_redirect为以下内容:

proxy_redirect http:// https://;
Run Code Online (Sandbox Code Playgroud)

这对于来自 HTTPS 的请求非常有效,但如果通过 HTTP 发出重定向,它也会将其重定向到 HTTPS,这是一个问题。

无奈之下,我尝试了:

if ($scheme …
Run Code Online (Sandbox Code Playgroud)

ssl nginx https

17
推荐指数
2
解决办法
3万
查看次数

标签 统计

https ×1

nginx ×1

ssl ×1