Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problem v komunikacii medzi apache a fastcgi (php-fpm)

9 views
Skip to first unread message

Martin Tirsel

unread,
Jul 30, 2013, 8:28:08 AM7/30/13
to li...@linux.cz
Zdravim,

mam tu viacero webov, vsetky ok, ale tento jeden dnes zacal zlobit a
absolutne netusim co s tym, nemam sa vobec coho chytit. Vedel by niekto
poradit?

Je to nejaky Wordpress web, do dnes ok. Teraz dostavam z apache Internal
server error, v logoch apache:

[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"

Avsak v PHP-FPM logu je k tomu takyto zaznam:

- - 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

To znamena, ze stranka bola vygenerovana korektne (kod 200, odpoved
prakticky ihned po requeste). Ale apache sa tvari, akoby tu odpoved
nedostal a caka 30 sekund, nasledne vyhodi timeout.

Co je zaujimave, ze ak ten wordpress odstrihnem pred </body> tagom
(<?php die(); ?>), tak sa stranka nacita a je to ok.

Konfigurak virtualu je rovnaky ako u dalsich asi 30-40 podobnych webov:

<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>



a 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/
;php_value[display_errors] = On


Nestretol sa niekto s niecim podobnym? Pripadne na co by som sa mal
skusit zamerat? Da sa nejako rozumne debugovat komunikacia medzi apache
a fastcgi serverom? Rad by som videl, co sa vracia.

Dakujem!
M. Tirsel


Pavel Kankovsky

unread,
Aug 4, 2013, 4:15:06 AM8/4/13
to Diskuse o Linuxu v cestine
On Tue, 30 Jul 2013, Martin Tirsel wrote:

> Je to nejaky Wordpress web, do dnes ok. Teraz dostavam z apache Internal
> server error, v logoch apache: [...]
> Avsak v PHP-FPM logu je k tomu takyto zaznam: [...]
> To znamena, ze stranka bola vygenerovana korektne (kod 200, odpoved
> prakticky ihned po requeste). Ale apache sa tvari, akoby tu odpoved
> nedostal a caka 30 sekund, nasledne vyhodi timeout.

Myslím, že nejjednodušší bude zkusit strace na příslušný FastCGI proces a
podívat se, zda z něj ta data skutečně odejdou a zda jsou řádně ukončena
(a zda v nich není nějaká podivnost).

Pokud to vypadá, že je chyba na straně přijímače, tak lze ještě zkusit
strace na Apache, ale to je trochu adrenalin, jelikož se musí chytit
správný proces (nebo se musí trasovat všechny procesy najednou, což při
větším provozu generuje hodně balastu).

Zdá se, že mod_fastcgi nelze v přirozeném stavu přimět k nějakým ladícím
výpisům, takže v případě, že bych se dostal až sem a na nic nepřišel, by
další krok asi spočíval v tom, že bych provedl nějakou instrumentaci toho
modulu, abych viděl, kde sejde z pravé cesty (podle nálady buď primitivně
ručním přidáním diagnostických výpisů do kódu nebo sofistikovaně např.
přes nějaké DynamoRIO nebo podobnou věc). Ale to už by asi bylo vhodné
nezkoušet na provozním systému, ale na nějakém jeho klonu.

> Co je zaujimave, ze ak ten wordpress odstrihnem pred </body> tagom
> (<?php die(); ?>), tak sa stranka nacita a je to ok.

A co když je die() až za </body>?

A mimochodem: co když vyrobíte v tom virtuálním serveru jednoduchý
testovací skript, který nemá s tím Wordpressem vůbec nic společného?

--
Pavel Kankovsky aka Peak / Jeremiah 9:21 \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /


0 new messages