DEBIAN - Nginx 和 Apache 反向代理丢失 HTTPS 状态?

DEBIAN - Nginx 和 Apache 反向代理丢失 HTTPS 状态?

我在 Debian 8 机器上配置 nginx 和 apache 时遇到问题。我使用 nginx 的反向代理,它设置为在 HTTPS 上运行(并且运行良好)。但是,当请求发送到 Apache 时,$_SERVER['HTTPS'] 为空,尽管它应该是“ON”(无论如何,这就是我想要实现的)?这是我的 apache 配置:

<VirtualHost 127.0.0.1:8080>
    ServerName shop.mywebsite.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www_shop

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    LogLevel debug
  <Directory "/">
    Require all granted
  </Directory>
</VirtualHost>

下面是我的 nginx congif,其中涉及代理传递:

    location ~ \.php {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header X-Original-Request $request_uri;
    add_header              Front-End-Https on;
    proxy_pass http://127.0.0.1:8080;
}

任何帮助、任何线索,都值得感激 ;) 谢谢,奥利维尔。

答案1

如果与 Web 服务器的连接是通过 HTTPS 建立的,则设置了您要查找的 HTTPS 状态。由于您要在 Apache 中查找此值,但只有 Nginx 通过 HTTPS 处理请求,并且 Apache 通过 HTTP 接收 Nginx 的请求,因此状态必须为非 HTTPS。

在 Nginx 的代理配置中,您已经设置了一些附加标头。您需要做的是,在 Apache 中检查这些标头并覆盖 HTTPS 状态标志

因此你必须安装并激活mod_setenvif在 Apache 中并将以下内容添加到您的 Apache 配置中:

<IfModule mod_setenvif.c>
    SetEnvIf X-Forwarded-Proto "https" HTTPS=on
</IfModule>

您的 Nginx 配置中缺少一项设置。只要您的 Apache 没有多个虚拟主机,这没有关系,但我建议在您的 Nginx 配置中添加以下内容:

proxy_http_version 1.1;

通过设置此项,Nginx 将使用 HTTP/1.1 与 Apache 通信。默认为 HTTP/1.0。

相关内容