nginx, fastcgi php and invision powerboard 2.1.7 (ajax?)
Malik Abdugaliev
malik at elcat.kg
Sun Dec 17 14:46:45 MSK 2006
Привет.
Поставил nginx 0.5.4, php 5.2.0 как fastcgi. Система FreeBSD 6.1.
На всём этом стоит движок форума invision powerboard 2.1.7. Это делалось на
замену обычной связке - апаче+mod_php и nginx как фронтенд.
Всё заработало с виду нормально, но после часа эксплуатации заметили некоторые
проблемы. Самое основное это ошибки при использовании AJAX-фичи для быстрого
редактирования своих сообщений:
2006/12/17 16:10:00 [error] 55895#0: *28759 upstream prematurely closed
connection while reading response header from upstream, client: 10.0.1.31,
server: forum.tld, URL:
"/index.php?s=&act=xmlout&do=post-edit-save&p=3213952&t=404709&f=129",
upstream: "fastcgi://unix:/tmp/php.sock:", host: "forum.tld", referrer:
"http://forum.tld/index.php?showtopic=404709"
Для клиента это выглядит так - выбираешь опцию "Быстрое редактирование",
правишь сообщение, нажимаешь "Применить исправления", появляется бегунок и на
этом всё, более никаких изменений.
В логах PHP при этом ругань о преждевременной (premature) кончине скрипта
sources/ipclass.php, с указанием строки 3737 (к сожалению точных логов не
сохранилось):
/**
* UnHTML and stripslashes _GET _POST value
*
* @param string Input
* @return string Cleaned Input
* @since 2.1
*/
function parse_clean_value($val)
{
if ($val == "") # <<< вот строка номер 3737 <<<
{
return "";
}
Я грешил на отсутствие некоторых переменных, которые не передавались в
fastcgi, но эксперименты ними не помогли. Вот конфиг nginx в части fastcgi:
location ~* ^.+\.(php)$ {
fastcgi_pass unix:/tmp/php.sock;
fastcgi_index index.php;
# пробовал с минимумом параметров:
fastcgi_param PATH_TRANSLATED $fastcgi_path_translated;
fastcgi_param QUERY_STRING $query_string;
# потом с параметрами для метода POST:
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
# и со всеми параметрами, какие нашёл:
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $fastcgi_path_translated;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
}
А вот так запускается php:
PHP_FCGI_CHILDREN=10 /usr/local/php520/bin/php -a -b /tmp/php.sock
Кроме этого возникала другая ошибка, которую мне не удалось привязать к
конкретному действию на форуме (вероятно какие ресурсоёмкие запросы, типа
поиска):
2006/12/17 16:10:50 [error] 55893#0: *29240 FastCGI sent in stderr: "PHP Fatal
error: Out of memory (allocated 2883584) (tried to allocate 1732099484
bytes) in /www/forum/sources/sql/mysql_extra_que
ries.php on line 70" while reading response header from upstream, client:
195.38.161.6, server: forum.tld, URL:
"/index.php?s=&act=xmlout&do=get-member-names&name=%u041F%u0438%u043B%u044E%u0
43B%u044F&__=1166350279734", upstream: "fastcgi://unix:/tmp/php.sock:", host:
"forum.tld", referrer: "http://forum.tld/index.php?act=Search&f="
Т.е. php запросил 1.7 гига памяти, в то время когда ему выдано 2.8 метра )
После часа экспериментов на живых людях пришлось откатиться к старой схеме с
апачем (
Есть ли у кого-нибудь какие замечания по устранению этих проблем?
Спасибо.
Малик.
More information about the nginx-ru
mailing list