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

NGINX+PHP-FPM虚拟主机PHP请求跳转至错误目录问题求助

解决多站点PHP-FPM跳转错误的问题

看起来你遇到的是典型的多站点PHP-FPM配置冲突问题,我来帮你一步步排查和解决:

1. 检查PHP-FPM池的监听配置

首先确认两个PHP-FPM池的监听地址/套接字是完全独立的,绝对不能共用同一个:

  • 打开/etc/php-fpm.d/mysite1.conf,找到listen指令,比如可能是listen = /run/php-fpm/mysite1.sock
  • 打开/etc/php-fpm.d/mysite2.conf,确保listen是不同的路径,比如listen = /run/php-fpm/mysite2.sock
    如果两个池用了同一个套接字,PHP-FPM会把所有请求都路由到先启动的那个池,自然就会指向mysite1的文件了。

2. 核对Nginx配置里的FastCGI传递设置

打开/etc/nginx/mysite1.conf和/etc/nginx/mysite2.conf,重点检查以下几个核心参数:

  • DOCUMENT_ROOT:确保mysite2的配置里是它自己的网站根目录,比如:
    fastcgi_param DOCUMENT_ROOT /var/www/mysite2;
    
  • SCRIPT_FILENAME:这个参数直接决定PHP-FPM要执行哪个文件,必须对应mysite2的路径,比如:
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
  • fastcgi_pass:确认mysite2的配置里指向的是自己的PHP-FPM套接字/端口,比如:
    fastcgi_pass unix:/run/php-fpm/mysite2.sock;
    

很多时候都是复制配置后忘记修改fastcgi_pass或者DOCUMENT_ROOT,导致请求还是发给了mysite1的PHP池。

3. 检查PHP-FPM池的环境变量配置

在PHP-FPM的池配置里,有些场景会设置php_value[doc_root],如果mysite2的这个参数还是指向mysite1的路径,也会导致错误:
打开/etc/php-fpm.d/mysite2.conf,查找类似这样的配置:

php_value[doc_root] = /var/www/mysite2

确保路径是mysite2的正确目录,而不是mysite1的。

4. 验证配置并重启服务

修改完配置后,一定要先验证配置的正确性,避免语法错误导致服务启动失败:

  • 验证Nginx配置:nginx -t,如果没有报错再重启Nginx:systemctl restart nginx
  • 验证PHP-FPM配置:php-fpm -t,然后重启PHP-FPM:systemctl restart php-fpm
    (如果是特定PHP版本,比如PHP7.4,命令可能是php-fpm7.4 -t,根据你的实际环境调整)

5. 清除缓存测试

有时候浏览器缓存或者Nginx的静态缓存会残留旧的跳转记录,你可以:

  • 清空浏览器缓存,或者用隐私/无痕模式访问测试
  • 如果Nginx配置了页面缓存,临时注释掉缓存相关指令,重启后再测试

按照上面的步骤排查,基本就能解决mysite2访问PHP文件跳转到mysite1的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:07:43