我有多个运行 Wordpress 的虚拟网站,但这个网站开始出现错误,而我无法找到问题所在。
阿帕奇说:
[Tue Jul 30 14:13:40 2013] [error] [client 82.100.0.70] FastCGI: comm with server "/var/www/uzivatel/www.domena.xy.php5-fcgi" aborted: idle timeout (30 sec)
[Tue Jul 30 14:13:40 2013] [error] [client 82.100.0.70] FastCGI: incomplete headers (0 bytes) received from server "/var/www/uzivatel/www.domena.xy.php5-fcgi"
但是 PHP-FPM 日志正常(它是在请求后几毫秒内生成的):
- - 30/Jul/2013:14:13:10 +0200 "GET /index.php" 200 /var/www/uzivatel/webs/www.domena.xy/index.php 793.871 35072 37.79/30.23
有代码 200,因此页面似乎创建正确,但 Apache 的行为就像没有来自 fastcgi 服务器的回复一样。
但有趣的是,当我在 之前切断页面生成时,apache 会将其正确返回给客户端。但如果我<?php die(); ?>
在标签后插入 ,则会发生相同的错误。
有什么方法可以调试 apache 和 fastcgi 服务器之间的通信吗?
配置如下(同样的配置也适用于其他虚拟网站):
<VirtualHost 1.2.3.4:80>
ServerName www.domena.xy
DocumentRoot /var/www/uzivatel/webs/www.domena.xy/
FastCgiExternalServer /var/www/uzivatel/www.domena.xy.php5-fcgi -socket /tmp/php-fpm/php-www.domena.xy.socket -pass-header Authorization
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /var/www/uzivatel/www.domena.xy.php5-fcgi
AddHandler php5-fcgi .php
<Directory "/var/www/uzivatel/webs/www.domena.xy/">
Options ExecCGI FollowSymLinks
Order Allow,Deny
Allow From all
</Directory>
</VirtualHost>
<VirtualHost 1.2.3.4:80>
ServerName domena.xy
RedirectPermanent / http://www.domena.xy/
</VirtualHost>
和 PHP-FPM:
[www.domena.xy]
user = uzivatel
group = uzivatel
listen = /tmp/php-fpm/php-www.domena.xy.socket
listen.owner = uzivatel
listen.group = uzivatel
listen.mode = 0660
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 300s
pm.max_requests = 1000
access.log = /var/www/uzivatel/.log/$pool.php-fpm.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C/%{user}C"
slowlog = log/$pool.log.slow
;request_slowlog_timeout = 0
request_terminate_timeout = 600
rlimit_files = 500
security.limit_extensions = .php .php3 .php4 .php5
php_admin_value[memory_limit] = 64M
php_admin_value[open_basedir] = /var/www/uzivatel/.tmp/:/var/www/uzivatel/webs/www.domena.xy/
php_admin_value[upload_tmp_dir] = /var/www/uzivatel/.tmp/
php_value[session.save_path] = /var/www/uzivatel/.sessions/www.domena.xy/
答案1
在 Apache vhost 配置中,尝试添加-idle-timeout
参数:
FastCgiExternalServer /var/www/uzivatel/www.domena.xy.php5-fcgi
-idle-timeout 60
-socket /tmp/php-fpm/php-www.domena.xy.socket -pass-header Authorization
看文档了解更多详情。
答案2
Apache 可能具有写入套接字文件的文件访问权限/tmp/php-fpm/php-www.domena.xy.socket
,但没有读取权限。
(关于权限和 PHP-FOM 的附注:虽然 PHP-FPM 服务器/var/www/uzivatel/www.domena.xy.php5-fcgi
不必作为文件存在,但其包含的目录必须存在,并且 Apache 必须对其具有读/写权限。)