我的 apache 位于支持 SSL 的 NGINX 反向代理后面。我的后端 apache 服务器仅侦听 HTTP,因此我使用:
proxy_pass http://realip:8888;
但是,这会破坏网站,因为所有 URL 都转到 http,而 chrome 不允许 HTTP 通过 HTTPS 加载。如何将标头设置为“https://”,同时通过“http”发送到后端 apache 服务器?
答案1
解决此问题的最佳方法是使用后端应用程序。(我对后端应用程序一无所知,因此我会尝试给出一个一般性的答案。)
以下是 2 个选项:
配置或修改后端 Web 应用程序以在建立链接时使用“https”,而不是检测实际使用的协议。
(更好的选择)配置或修改后端 Web 应用程序以使用X-转发-Proto建立链接时,请指定此标头。此标头将在 nginx 代理中设置,如下所示:
proxy_set_header X-Forwarded-Proto $scheme;
某些安装(例如 Ubuntu 软件包)在proxy_params
代码片段中提供此标头,并可以像这样包含:'include proxy_params'。
这两个选项都需要后端 Web 应用程序专门支持此功能,或者您能够对其进行修改。
如果后端 Web 应用程序根据用于联系它的协议构建链接(例如$_SERVER['SERVER_PROTOCOL']
php),那么仅使用 nginx 代理就无法改变这一点。