在我的负载均衡器上,我终止与 Nginx 的 HTTPS 连接,然后将请求代理到同样由 Nginx 支持的 Web 服务器之一。
在 fastcgi_params 的负载均衡器上,我有:
fastcgi_param HTTPS $https;
在 Web 服务器上有一个只能通过 HTTPS 访问的站点。如何检测是否设置了 HTTPS 参数,如果没有重定向到站点的安全版本?
在我的负载均衡器上,我终止与 Nginx 的 HTTPS 连接,然后将请求代理到同样由 Nginx 支持的 Web 服务器之一。
在 fastcgi_params 的负载均衡器上,我有:
fastcgi_param HTTPS $https;
在 Web 服务器上有一个只能通过 HTTPS 访问的站点。如何检测是否设置了 HTTPS 参数,如果没有重定向到站点的安全版本?
如果我理解正确,您的设置是这样的:
实际上有 3 个不同的地方可以进行重定向:
在您的前端 Nginx 服务器上,您可以在需要时进行重定向:
如果您不能在前端 Nginx 服务器上执行此操作,则必须携带有关使用协议的信息到后端 Nginx 实例。通常的方法是使用 X-Forwarded-Proto 标头。您应该在前端 Nginx 服务器上的适当位置添加:
然后,您可以在后面的 Nginx 服务器中进行重定向:
显然,您也可以在应用程序内处理重定向。您应该在应用程序中提供 X-Forwarded-Proto 标头,或者您可以将其设置为 fastcgi 参数:
http {} 中的某处
和额外的映射:
就个人而言,我认为重定向应该尽可能早地在链条中进行。