Nginx SSL 配置返回过多重定向,但常规 http 版本没有问题

Nginx SSL 配置返回过多重定向,但常规 http 版本没有问题

我最近尝试将 SSL 终止添加到我的 NGINX 服务器配置中。常规 http 反向代理/负载平衡版本运行良好。不幸的是,当前配置在浏览器中返回“重定向过多”。相关说明:此 NGINX 服务器正在从 Cloudflare 的完整 SSL 接收流量,然后继续将流量(通过纯 http)传递到位于 dockerized 前面的另一个 Nginx 服务器话语实例。只是想知道 Cloudflare 和 discourse 方面是否有任何问题,或者其他地方是否配置不正确。任何帮助都非常感谢!

upstream discourse {
    server 127.0.0.1:8080;
}

server {
    # Enforce the use of HTTPS and redirect www sub to root
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;

    access_log /var/log/nginx/example.com.log;
    error_log  /var/log/nginx/example-error.log;

    ssl_certificate /etc/nginx/ssl/certs/example.crt;
    ssl_certificate_key /etc/nginx/ssl/private/example.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ etc..."

    charset utf-8;

    location / {
        proxy_pass http://discourse;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_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 https;
    }
}

答案1

首先,确保您在 CloudFlare 中使用完整 SSL,而不是灵活 SSL。然后,下一步是确保您的源上的任何重定向都使用 X-Forwarded-For 而不是 SSL 环境变量;请记住,使用 SSL 终止后,您的源 Web 服务器将以纯文本形式看到连接。

答案2

您可能已将 cloudflare 配置为代理到 nginx web 服务器的 80/HTTP 端口。因此,它会跳转到配置的第一个服务器块并生成到 https://... 的重定向。要解决此问题,请将 cloudflare 配置为使用 nginx web 服务器的 443/HTTPS 作为后端。

答案3

似乎除了选择完整 SSL 之外,“始终使用 https”的页面规则也有帮助。

相关内容