php 在没有 ssl 的 nodejs 代理服务器后面

php behind nodejs proxy server without ssl

我有一个使用端口 443 在 "https" 上运行的节点 js 应用程序。如果 URL 路径以“/blog”开头,则此应用程序充当反向代理服务器。所有 URL 以“/blog”开头的请求都被转发到 apache,而不使用 SSL 连接。但是浏览器使用 SSL 连接与 Nodejs 连接。当 apache 收到带有 "http://" URL 方案的请求时,PHP 的 $_SERVER['https'] 未设置为 "on"。这导致静态资源的所有 URLs,如 CSS、javascript 文件以 "http://".

开头

因此浏览器给出页面加载过 "https" 的错误。但是从 "http://" 请求资源。这导致所有 CSS 和 javascript 文件被阻止。

现在我正在寻找一种方法来欺骗 PHP 请求来自 "https" 而不是 "http"。我知道我可以编辑代码并将 $_SERVER['https'] = 'on'; 放在每个脚本的开头。但这似乎不是解决问题的优雅方法。我想知道适用于每个目录的任何解决方案。就像一个 "htaccess" 文件。

确保您的反向代理服务器设置了 X-Forwarded headers。然后在您的 apache 文档根目录中创建一个 .htaccess 文件并将以下代码放入其中。

SetEnvIf X-Forwarded-Proto https HTTPS

这将仅适用于放置此文件的目录。因此,与其将此文件放在文档根目录中,不如将其放在要将 url 方案设置为 "https" 的位置。