AWS&PHP:当末尾没有斜杠时,HTTPS网站重定向到http

2022-06-10 00:00:00 amazon-web-services firewall php iis

我们有一个在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了解更多详细信息。

相关文章