我正在迁移我的服务器以使用 mod_proxy_fcgi 和 php-fpm 而不是 mod_php。Apache 能够将 .php 请求转发到 fcgi 代理,并且 PHP 可以正确执行。我有这个工作:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使文件不存在,Apache 也会将所有 .php 请求转发给代理。这会导致一些问题。我的 ErrorDocument 规则没有被调用,DirectoryIndex index.php index.html
也没有回退到 index.html。
我能够使用 mod_rewrite 解决这些问题:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/((.*\.php)(/.*)?)$
RewriteCond /var/www/html/%2 -f
RewriteRule . fcgi://127.0.0.1:9000/var/www/html/%1 [P]
Run Code Online (Sandbox Code Playgroud)
但是,Apache 文档不推荐 RewriteRule:“这是因为此标志触发了默认工作程序的使用,该工作程序不处理连接池。”
理想情况下,我想我要么想在 FilesMatch 块中使用 ProxyPass(目前不受支持),要么定义一个新的处理程序,通过 fcgi 代理并使用它来处理 .php 请求,类似于 mod_php 所做的。
任何模拟标准 mod_php 设置但实际上通过 fcgi 代理的建议?