php - 使用带有 aws ssl 证书的应用程序负载均衡器部署 yii2 项目
问题描述
我正在 aws 上部署我的 yii2 项目,并使用带有 aws ssl 证书的应用程序负载均衡器。问题是,每当调用 $this->redirect(..) 时,url 都会更改为 http 而不是 https,并且浏览器会显示“无法访问此站点”(负载平衡器仅处理 https)。我想强制所有重定向操作将 url 设置为 https。
更新
我将 url 管理器的 baseUrl 更改为https://mywebsite.com以解决此问题。现在它只出现在用户登录和注销时。使用 goHome() 和 goBack() 动作的地方
解决方案
当前解决方案的缺点是每个应用程序不能有多个域。我们有一个非常相似的设置。我们的负载均衡器正在终止 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。
推荐阅读
- android - “尝试在空对象引用上调用虚拟方法 'android.content.Context android.content.Context.getApplicationContext()'”
- python - 满足条件时就地修改python列表
- javascript - **错误** TypeError:无法读取未定义的属性“替换”
- python - 为什么 spyder 显示 def question1_2(8,9) 的语法错误?
- python - h5py conda 未被识别
- java - while(true) 使 cpu 无法读取共享变量的最新值
- cookies - 如何设置从另一个域接收的 cookie?
- jmeter - 如何在 jmeter 的请求中显示 Http Header 管理器
- python - 混淆python文件然后将其转换为exe的最佳方法是什么?
- php - 在 Apache 上的 Laravel 项目中重定向到 /public 文件夹时出现问题