Apache2.4配置PHP5-FPM遇AH01144错误,求解决方法
嘿,我之前帮不少人排查过这个AH01144错误,结合你的配置和已加载的模块来看,问题出在**ProxyPassMatch的格式不正确**,或者说Apache没正确关联到FCGI协议处理器上——虽然你已经加载了proxy_fcgi_module,但当前的写法没法让Apache正确识别。
问题拆解
你看到的错误提示,核心是Apache找不到处理.php请求的协议处理器。排除模块未加载的情况(你已经确认proxy_fcgi和proxy都加载了),剩下的就是配置写法的问题:
你现在用的ProxyPassMatch写法:
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:///var/run/php5-fpm.sock|fcgi://127.0.0.1/var/www/html/
这种用|分隔unix套接字和fcgi地址的格式,在Apache2.4的部分版本里是不被正确解析的,尤其是当使用本地套接字而非TCP端口的时候。
两种修正方案
方案1:用FilesMatch关联FCGI处理器(更推荐)
替换你虚拟主机里的ProxyPassMatch,改用FilesMatch块来明确指定PHP文件的处理方式,这种写法更清晰也更稳定:
<VirtualHost *:80> DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/default-error.log CustomLog ${APACHE_LOG_DIR}/default-access.log combined # 专门处理PHP文件的FCGI代理 <FilesMatch \.php$> SetHandler "proxy:unix:///var/run/php5-fpm.sock|fcgi://localhost/var/www/html" </FilesMatch> DirectoryIndex /index.php index.php </VirtualHost>
这里的SetHandler直接告诉Apache:所有.php文件都通过指定的unix套接字转发给PHP5-FPM处理。
方案2:修正ProxyPassMatch的正确格式
如果你习惯用ProxyPassMatch,可以调整成下面的格式——把unix套接字整合到fcgi地址里,而不是用|分隔:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://unix:/var/run/php5-fpm.sock:/var/www/html/$1
注意这里的结构是fcgi://unix:套接字路径:网站根目录/$1,$1用来匹配URL里的PHP文件路径,确保FPM能找到对应的文件。
必做的额外检查
- 套接字权限检查:
Apache进程(通常是www-data用户)需要有权限访问/var/run/php5-fpm.sock,不然会出现连接被拒绝的隐性错误。执行这两条命令调整权限:chown www-data:www-data /var/run/php5-fpm.sock chmod 660 /var/run/php5-fpm.sock - 重启双服务:
修改配置后,别只重启Apache,一定要同时重启PHP5-FPM,确保套接字的权限和配置都生效:sudo service apache2 restart sudo service php5-fpm restart
验证方法
重启后访问你的info.php,如果能正常显示PHP信息页就说明配置没问题了。要是还报错,去看看PHP-FPM的日志(一般在/var/log/php5-fpm.log),里面会有更详细的连接或文件路径错误提示。
内容的提问来源于stack exchange,提问作者bob

