AWS&;PHP:当末尾没有斜杠时,HTTPS网站重定向到http
我们有一个在AWS上托管其IIS Web服务器的客户端。当导航到此服务器上的特定PHP Web应用程序时,如果末尾有斜杠,则不起作用,但如果没有斜杠,则不起作用。
这是有效的: https://example.com.au/application/
但是,如果要在地址栏中输入以下内容: https://example.com.au/application 它将重定向到末尾带有斜杠的等效http地址: http://example.com.au/application/http已通过防火墙禁用,因此结果为错误。
以下是Chrome调试器中的请求详细信息 因此,我的问题是,我的客户端需要检查什么才能确保不发生此重定向?或者,它不重定向到HTTP,而是重定向到HTTPS?其他信息:
- .NET Web应用程序似乎不会出现同样的问题。例如‘https://example.com.au/dotnetapp’不会重定向至‘http://example.com.au/dotnetapp/’.
- URL重写中未配置规则
- 触发HTTPS URL时,IIS日志显示请求,但不显示HTTP URL。 编辑:这似乎是由于浏览器缓存造成的。禁用浏览器缓存后,我可以在日志文件中看到301条目。
- "index.php"设置为默认文档
解决方案
一个可能的原因是,php项目不知道安全连接处于活动状态,因此在添加斜杠时会将页面重定向到http版本。
PHP应用程序可以通过$_SERVER['SERVER_PORT']
、$_SERVER['REQUEST_SCHEME']
检测安全连接。但是,如果应用程序位于某个反向代理之后(例如,Varish或Amazon的弹性负载均衡器),则到PHP应用程序的连接可能不安全。应该通知PHP有关X-Forwarded-*
头的原始安全连接。
请检查PHP是否设置了以下变量:
$_SERVER['HTTP_X_FORWARDED_PROTO']
:应为https
,$_SERVER['HTTP_X_FORWARDED_PORT']
:应为443
。
symfony框架
如果应用程序使用的是框架(如symfony),则应将其配置为信任反向代理的IP并信任这些标头:
# config/packages/framework.yaml
framework:
# ...
# the IP address (or range) of your proxy
trusted_proxies: '192.0.0.1,10.0.0.0/8'
# trust *all* "X-Forwarded-*" headers
trusted_headers: ['x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto', 'x-forwarded-port']
# or, if your proxy instead uses the "Forwarded" header
trusted_headers: ['forwarded']
如果反向代理服务器的IP地址发生更改,请参阅https://symfony.com/doc/current/deployment/proxies.html了解更多详细信息,https://symfony.com/doc/current/deployment/proxies.html#but-what-if-the-ip-of-my-reverse-proxy-changes-constantly了解更多详细信息。
相关文章