**总结:**Apache2.4的mod_proxy似乎没有将Authorization头传递给PHP-FPM,有什么方法可以解决吗?
**长版本:**我运行的是Apache 2.4和PHP-FPM的服务器。我使用APC进行操作码缓存和用户缓存。根据Internet的推荐,我使用Apache 2.4的mod_proxy_fcgi将请求代理到FPM,如下所示:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/foo/bar/$1
设置工作正常,除了一件事:APC捆绑的apc.php,用于监控APC的状态,不允许我登录(查看用户缓存条目时需要).当我点击“用户缓存条目”查看用户缓存时,它要求我登录,点击登录按钮显示通常的HTTP登录表单但是输入正确的登录名和密码没有成功。当使用mod_php而不是mod_proxy + php-fpm运行时,这个函数可以完美地工作。
经过一些谷歌搜索,我发现其他人也有同样的问题,并指出这是因为Apache没有将授权HTTP头传递给外部FastCgi进程。不幸的是,我只找到了mod_fastcgi的修复,看起来像这样:
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
是否有一个等效的设置或一些变通办法,也将与mod_proxy_fcgi?
5条答案
按热度按时间kq4fsx7k1#
各种Apache模块会剥离
Authorization
头,通常是出于“安全原因”。它们都有不同的模糊设置,您可以调整以阻止这种行为,但您需要确切地确定哪个模块是罪魁祸首。你可以通过env直接将头文件传递给PHP来解决这个问题:
另请参见Zend Server Windows - Authorization header is not passed to PHP script
在某些情况下,即使这样也不能直接工作,您还必须更改PHP代码以访问
$_SERVER['REDIRECT_HTTP_AUTHORIZATION']
而不是$_SERVER['HTTP_AUTHORIZATION']
。wj8zmpe12#
这花了我很长时间来破解,因为它没有记录在mod_proxy或mod_proxy_fcgi下。
将以下指令添加到apache conf或.htaccess中:
详情请参见此处。
4uqofj5v3#
最近我对这个拱门没什么问题。
在我的环境中,php-fpm的代理配置如下:
我修复了设置SetEnvIf指令的问题,如下所示:
ttygqcqt4#
我添加了
在VirtualHost节点中
mrfwxfqh5#
我没有找到任何类似的设置与mod_proxy_fcgi,但它只是为我默认工作.它要求用户授权(.htaccess像往常一样)和php得到它,并与mod_php或fastcgi和pass-header一样工作.我不知道如果我是有帮助的...
编辑:只有在www.example.com上teszt.com/使用DirectoryIndex时才有效...如果我传递php文件名(即使是index.php!),它就不起作用,不要传递auth给php。这对我来说是一个拦截器,但我不想降级到apache2.2(和mod_fastgi),所以我迁移到nginx(在这台机器上也是)。