You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-FPM容器无法解析HTTPD容器内PHP代码的问题求助

解决HTTPD无法解析PHP文件、直接显示代码的问题

核心问题分析

你的HTTPD服务器未将PHP请求正确转发给PHP-FPM处理,导致PHP代码被当作静态文本直接输出。以下是针对性的排查与解决步骤:

1. 确保HTTPD加载必要的代理模块

使用proxy:fcgi://方式转发PHP请求,必须启用mod_proxy和mod_proxy_fcgi模块。Docker官方httpd镜像默认未加载这些模块,需手动启用:

  • 方法1:修改docker-compose.yml中httpd服务的启动命令:
    command: httpd -D FOREGROUND -c "LoadModule proxy_module modules/mod_proxy.so" -c "LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so"
    
  • 方法2:在自定义httpd.conf开头添加模块加载指令:
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    

2. 匹配VirtualHost配置与访问路径

你的自定义VirtualHost监听*:8080,需确保:

  • Nginx反向代理的目标为httpd容器的8080端口,即Nginx配置中proxy_pass值应为http://httpd:8080;
  • 访问时的请求Host头与VirtualHost的ServerName匹配,或添加ServerAlias localhost适配本地访问:
    <VirtualHost *:8080>
    DocumentRoot /var/www/html
    ServerName page.com
    ServerAlias localhost  # 添加该行适配localhost访问
    
    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://php:9000"
    </FilesMatch>
    
    <Directory "/var/www/html">
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
    </VirtualHost>
    

3. 验证PHP-FPM的监听配置

确保PHP-FPM的www.conf中监听地址为容器可访问的端口,而非仅本地回环:

listen = 0.0.0.0:9000  # 替换默认的127.0.0.1:9000

(你已通过nmap确认端口开放,此步主要确保配置无访问限制)

4. 检查HTTPD配置语法与日志

  • 在httpd容器内执行httpd -t,排查配置文件语法错误
  • 查看HTTPD错误日志(通常路径为/var/log/httpd/error_log),搜索mod_proxy或SetHandler相关报错,比如模块未加载的提示

验证解决效果

修改配置后重启httpd与php-fpm容器,再次访问PHP文件即可正常解析执行。

内容的提问来源于stack exchange,提问作者kostik kostik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:38:13