PHP-FPM 301从不正确的套接字分配重定向

时间:2018-02-01 03:48:45

标签: php apache sockets redirect

这是我的第一篇文章,所以如果看起来不对劲,请告诉我。我有一个有趣的问题。有点配置背景的问题。我有一个带有HAproxy的负载均衡代理后面的两个Web节点。这些Web节点使用ApachePHP-FPM使用unix套接字。如果网站需要PHP,则会将ProxyPassMatch指令分配给虚拟主机。需要PHP的虚拟主机示例:

<VirtualHost *:80>
  ServerName  www.site1.com
  ServerAlias  site1.com
  DocumentRoot  /path/to/docroot/var/www
  ProxyPassMatch "^/(.*\.php(.*)?)$" "unix:/php-sockets/php5.6_site1.com.sock|fcgi://127.0.0.1/var/www"
</VirtualHost>

unix套接字的池配置:

[site1.com]
prefix                  =               /path/to/docroot
chroot                  =               /path/to/docroot
user                    =               <logical uid>
group                   =               <logical gid>
listen                  =               /php-sockets/php5.6_site1.com.sock
chdir                   =               /
listen.owner            =               www-data
listen.group            =               www-data
pm                      =               dynamic
pm.max_children         =               5
pm.start_servers        =               2
pm.min_spare_servers    =               1
pm.max_spare_servers    =               3

其他网站将遵循此标准配置,但域名不同。问题是,PHP-FPM在某些请求上分配了错误的套接字,导致301重定向到错误的URL。例如,另一个站点将具有与上述相同的配置,具有不同的域名。有时,FPM管理器会为site2的请求分配一个用于site1的套接字。导致错误的网站加载。我已经开启了非常详细的Apache登录以查看这是如何发生的,但不幸的是,我看到的最多信息是PHP-FPM根据请求进行分配时。在site1的virtualhost配置中没有提到site2.com's套接字。我不知道如何发生这种情况。

1 个答案:

答案 0 :(得分:0)

终于解决了。不得不在php.ini文件中设置一个标志

opcache.validate_root=1