当 apache 在 8080 上监听并且 varnish 在 80 上监听时,如何强制 php 将 SERVER_PORT 读取为 80?
如果我的 apache vhost 设置为 8080,SERVER_PORT 将始终为 8080,这让我有点麻烦,因为在应用程序的许多部分,一些链接是使用 SERVER_NAME 和 SERVER_PORT 一起计算的,所以我需要的是 php“相信”SERVER_PORT 是 80,所以所有链接都会通过 varnish
答案1
像这样更改您的设置:
- apache 在 127.0.0.1,端口 80 上运行
- varnish 在 192.168.1.1 端口 80 上运行(其中 192.168.1.1 是你的实际真实 ip)
这样,两个守护进程都在端口 80 上运行。当然,这只有当您不需要从本地机器外部访问 apache 时才有效。
答案2
我认为没有任何干净的方法可以做到这一点。每个 PHP 脚本中是否都包含一些需要以这种方式设置的文件?如果是这样,您可以做一些可怕的事情,例如:
$_SERVER['SERVER_PORT'] = 80;
答案3
嗯,它不干净……但是在庞大的代码库中,您可以考虑通过 php.ini 或 .htaccess 使用“auto_prepend_file”,在其中您可以重置 $_SERVER 变量。(参见:http://php.net/manual/en/ini.core.php)
但这又不是一个干净的解决方案;-)
答案4
我在较新的 mod_rpaf 中添加了对此的支持 @https://github.com/gnif/mod_rpaf。