我注意到默认情况下在 nginx 中启用了功能,其中文件系统中存在的目录的没有尾部斜线的 url 请求会自动通过301
重定向添加斜线。
例如,如果该目录css
存在于我的根目录中,那么请求http://example.com/css
将导致 301 到http://example.com/css/
.
但是,我有另一个站点,其中 SSL 由负载平衡器卸载。在这种情况下,当我请求时https://example.com/css
,nginx 发出一个 301 重定向到http://example.com/css/
,尽管HTTP_X_FORWARDED_PROTO
标头https
由负载均衡器设置为。
这是一个 nginx 错误吗?或者我在某处错过的配置设置?
Nginx 不会查找 HTTP_X_FORWARDED_PROTO,这不是错误。只是缺少这样的功能。
你应该配置你的前端来调整响应中的位置标头,或者用另一个 nginx 替换它(因为 nginx 本身是一个很好的负载平衡器和 SSL 终结器)。
看起来 LB 正在执行 SSL 终止,而 nginx 只是收到一个 HTTP 请求。Nginx 不会修改它接收到的任何 HTTP 标头。您可以使用重写规则来执行此操作,该规则检查是否设置了 HTTP_X_FORWARDED_PROTO,然后相应地重写请求。仅供参考 nginx 不支持嵌套或复杂的“if”语句,因此您必须求助于下面链接中描述的方法。
http://rosslawley.co.uk/2010/01/nginx-how-to-multiple-if-statements/