我正在使用带有 PHP-FPM7.0.26-2
和5.6.32-1
来自存储库 deb.sury.org 的 Debian 9。相同的配置在带有 PHP-FPM 的 Debian 8 服务器上运行良好5.6.30
- 我已经
pool.d/user.conf
从该服务器复制了。 - 这两个
php.ini
文件都有cgi.fix_pathinfo=1
. - 该参数也被强制使用
php_admin_value[cgi.fix_pathinfo] = 1
。 <VirtualHost>
两台服务器从上下文中类似地使用此池:ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/user.sock|fcgi://localhost/home/user/public_html
现在,有一个 AJAX 页面需要从PATH_INFO
(可能PATH_TRANSLATED
)读取路径。然而,虽然这些变量在 Debian 8 服务器上具有正确的内容:
["SCRIPT_NAME"]=>
string(14) "/path/ajax.php"
["ORIG_SCRIPT_NAME"]=>
string(25) "/path/ajax.php/para/meters"
["PATH_INFO"]=>
string(12) "/para/meters"
["PATH_TRANSLATED"]=>
string(34) "/home/user/public_html/para/meters"
它们在新的 Debian 9 + dub.sury.org 上的工作方式似乎有所不同:
["SCRIPT_NAME"]=>
string(25) "/path/ajax.php/para/meters"
["PATH_TRANSLATED"]=>
string(22) "/home/user/public_html"
和参数ORIG_SCRIPT_NAME
完全PATH_INFO
丢失。
这是我使用 proxy_fcgi 的方式。如示例中所述
mod_proxy_fcgi
:所以我换了我的
带有处理程序和工作人员:
现在所有的 AJAX 请求都工作正常。
奖励:如果有人知道为什么
ProxyPassMatch
能够PATH_INFO
在我的 Debian 8 / Apache 2.4.10 / PHP-FPM 5.6.30 上计算之前的值,但不能在 Debian 9 上计算,那就太棒了。正如它所描述的:
https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html#env
ProxyPassMatch 未设置 PATH_INFO 的原因如下: