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
相关产品推荐
相关产品推荐

