首页 > 解决方案 > 没有ssl的nodejs代理服务器后面的php

问题描述

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

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

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

标签: phpnode.jsapachehttpshttp-proxy

解决方案


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

SetEnvIf X-Forwarded-Proto https HTTPS

这仅适用于放置此文件的目录。因此,您可以将此文件放置在要将 url 方案设置为“https”的位置,而不是将其放置在文档根目录中。


推荐阅读