我最近尝试将 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”的页面规则也有帮助。