尝试通过PHP-FPM代理后端配置Apache 2.4,并在unix套接字上侦听。 以下基本配置可以正常运行:
<VirtualHost *:80>
DocumentRoot "/srv/httpd/htdocs"
ServerName example.tld
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php-fpm.sock|fcgi://localhost/srv/httpd/htdocs/"
</VirtualHost>
现在,我想针对特殊情况修改ProxyPassMatch。当domain之后的URI以test
开头时,在目标路径的路径中插入/special/
:
<VirtualHost *:80>
# -- snip --
ProxyPassMatch "^/test/(.*\.php(/.*)?)$" "unix:/var/run/php-fpm.sock|fcgi://localhost/srv/httpd/htdocs/test/special/$1"
</VirtualHost>
但是它失败,并显示以下调试错误:
[Mon Nov 26 21:38:31.484668 2018] [proxy:error] [pid 14779:tid
140031510611712] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:8000 (*) failed
[Mon Nov 26 21:38:31.484707 2018] [proxy_fcgi:error] [pid 14779:tid
140031510611712] [client ::1:55464] AH01079: failed to make connection to backend: 127.0.0.1
在任何apache配置文件中都没有指定端口8000之类的地方。
仅当目标URL既是unix域套接字又是时,它的行为方式是
脚本路径包含一个正则表达式捕获引用$N
。
unix:/var/run/php-fpm.sock|fcgi://localhost/srv/httpd/htdocs/test/special/$1
如果省略正则表达式捕获或使用TCP URI而不是套接字,则不会尝试连接到127.0.0.1:8000。
在这种情况下,官方documentation对于fcgi格式尚不清楚。实现中可能存在错误?
在使用RE模式中捕获的引用时,如何正确地将请求的URL映射到unix套接字?