【问题标题】:AWS Application Load Balancer SSL Termination with Apache DockerAWS Application Load Balancer SSL 终止与 Apache Docker
【发布时间】:2020-09-23 05:31:02
【问题描述】:

我正在使用 AWS 应用程序负载均衡器来设置我的环境。

应用程序负载平衡器在端口 443 接收来自 Internet 的请求并将其转发到端口 80。
Apache 服务器在负载均衡器后面的端口 80 上的 EC2 服务器上与 docker 一起运行。
我的网站是使用 CakePHP 开发的。
当我拨打https://www.example.com 时,我的网页已加载。
但是,在 PHP 中,当我使用以下代码获取当前 url 时,我得到的 url 是http://www.example.com。我没有得到https。我只得到http。

echo Router::url('/', true);

因此,当应用程序进行 ajax 调用时,请求来自 http(不是 https),并且浏览器将请求作为 “blocked:mixed contents” 拒绝。 我认为请求应该以 https 的形式出现。 请指出我遗漏了什么。

我尝试了以下方法,但没有任何效果

在主机文件中。 (或)我把它放在 .htaccess 中

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

【问题讨论】:

  • 如果您在您的环境中以某种方式将HTTPS 定义为true(例如Apache config 或.env 文件),我认为这可能会为您解决问题。
  • @GregSchmidt 你能告诉我如何在 apache 中将 HTTPS 定义为 true 的示例吗?感谢您的帮助。

标签: amazon-web-services apache docker cakephp aws-application-load-balancer


【解决方案1】:

我得到了解决方案。 诀窍是设置 $_SERVER['HTTPS'] 变量 "on"。 在 apache 中,打开“setenvif”模块。 然后在“/etc/apache2/apache2.conf”中,放入如下设置

# for port forwarding
RemoteIPHeader X-Forwarded-For

# set Environment Variable
SetEnvIf x-forwarded-proto https HTTPS=on

之后,检查“phpinfo()”以确保 $_SERVER['HTTPS']"on"

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 2019-08-06
    • 2019-04-19
    • 2021-01-21
    • 1970-01-01
    • 2017-07-30
    • 2017-11-23
    • 2018-03-08
    相关资源
    最近更新 更多