首页 > 解决方案 > 使用带有 aws ssl 证书的应用程序负载均衡器部署 yii2 项目

问题描述

我正在 aws 上部署我的 yii2 项目,并使用带有 aws ssl 证书的应用程序负载均衡器。问题是,每当调用 $this->redirect(..) 时,url 都会更改为 http 而不是 https,并且浏览器会显示“无法访问此站点”(负载平衡器仅处理 https)。我想强制所有重定向操作将 url 设置为 https。

更新

我将 url 管理器的 baseUrl 更改为https://mywebsite.com以解决此问题。现在它只出现在用户登录和注销时。使用 goHome() 和 goBack() 动作的地方

标签: phpamazon-web-servicesyii2yii2-advanced-appaws-application-load-balancer

解决方案


当前解决方案的缺点是每个应用程序不能有多个域。我们有一个非常相似的设置。我们的负载均衡器正在终止 ssl,所有其他流量都通过 http 在内部网络中发送。

为了满足您的需要,请确保将标头X-Forwarded-Proto设置为https

并将请求组件配置为不删除X-Forwarded-Proto(通过secureHeaders)或配置$trustedHosts,以便标头过滤器根本不会删除任何安全标头。

例如:

'request' => [
            'class' => 'yii\web\Request',
            'enableCsrfValidation' => true,
            'cookieValidationKey' => 'YOUR COOKIE KEY',
            'csrfCookie' => [
                'httpOnly' => true,
                'secure' => true
            ],
            'secureHeaders' => [
                // Common:
                'X-Forwarded-For',
                'X-Forwarded-Host',
                //secure headers are filtered out if they are sent from not trusted remote hosts.
                
                //'X-Forwarded-Proto',

                // Microsoft:
                'Front-End-Https',
                'X-Rewrite-Url',
            ]
        ],

之后getIsSecureConnection()将正确返回 true,并且您的重定向 URL 将生成为 https。


推荐阅读