php - 没有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”文件。
解决方案
确保您的反向代理服务器设置 X-Forwarded 标头。然后在您的 apache 文档根目录中创建一个 .htaccess 文件并将以下代码放入其中。
SetEnvIf X-Forwarded-Proto https HTTPS
这仅适用于放置此文件的目录。因此,您可以将此文件放置在要将 url 方案设置为“https”的位置,而不是将其放置在文档根目录中。
推荐阅读
- php - 我只需要在日期字段 TCA 错字3 中显示月份和年份
- ms-access - 如何在 MS Access 表单中添加序列号字段
- intellij-idea - 抑制关于 IDEA 中未使用的 Kotlin 属性的警告
- ruby - Ruby 内存使用变得疯狂
- java - ComboBoxTableCell 依赖于 JavaFx 的另一种类型
- c# - 正在拖动的 TreeList 节点字段未在数据库表中更新
- python-3.x - 如何隐藏/删除 mayavi 管道?
- twitter-bootstrap - 建议下拉菜单覆盖日期选择器
- python - django 和 sorl.thumbnail 模型字段的问题
- angular - Angular Universal,如何将带有声明的模块与服务器端执行隔离开来?