当负载均衡器处理SSL时,如何让nginx向HTTPS位置发出301请求?

我注意到在默认情况下,nginx已经启用了function,因此对于文件系统中存在的目录,没有结尾斜杠的url请求会自动通过301redirect添加一个斜杠。

例如,如果目录css存在于我的根目录下,那么请求http://example.com/css会导致一个301到http://example.com/css/

但是,我有另一个站点,由负载平衡器卸载SSL。 在这种情况下,当我请求https://example.com/css时,尽pipeHTTP_X_FORWARDED_PROTO头被负载平衡器设置为https ,nginx会发出301redirect到http://example.com/css/

这是一个nginx错误吗? 或者我错过了一个configuration设置?

Nginx不寻找HTTP_X_FORWARDED_PROTO,这不是一个错误。 这只是缺乏这样的function。

你应该configuration你的前端来调整位置标题的响应 ,或者用另一个nginxreplace它(因为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/