![DEBIAN - Nginx 和 Apache 反向代理丢失 HTTPS 状态?](https://linux22.com/image/710102/DEBIAN%20-%20Nginx%20%E5%92%8C%20Apache%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E4%B8%A2%E5%A4%B1%20HTTPS%20%E7%8A%B6%E6%80%81%EF%BC%9F.png)
我在 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。