这是我的第一篇文章,所以如果看起来不对劲,请告诉我。我有一个有趣的问题。有点配置背景的问题。我有一个带有HAproxy的负载均衡代理后面的两个Web节点。这些Web节点使用Apache
,PHP-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
套接字。我不知道如何发生这种情况。
答案 0 :(得分:0)
终于解决了。不得不在php.ini
文件中设置一个标志
opcache.validate_root=1