Я видел здесь несколько вопросов, в которых выделяются случайные 502 (Nginx + PHP-FPM = "Случайный" 502 Bad Gateway) и аналогичные тайм-ауты при использовании Nginx + PHP-FPM.
Даже со всеми вопросами я все еще не могу найти решение.
При использовании Ubuntu 10.10 + Nginx + PHP5-FPM + APC каждый 1 из 4 запросов заканчивается тайм-аутом и ошибкой. Это не проблема загрузки или большого трафика, это происходит даже в среде разработки с одним человеком.
Я делаю это на 3 машинах по 1 ГБ, каждая с одинаковыми конфигурациями и одинаковыми проблемами.
fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
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 SERVER_SOFTWARE nginx/$nginx_version;
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;
fastcgi_param REDIRECT_STATUS 200;
/etc/php5/fpm/main.conf
; FPM Configuration ;
;include=/etc/php5/fpm/*.conf
; Global Options ;
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
;log_level = notice
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0
;daemonize = yes
; Pool Definitions ;
include=/etc/php5/fpm/pool.d/*.conf
/etc/php5/fpm/pool.d/www.conf
[www]
listen = 127.0.0.1:9000
;listen.backlog = -1
;listen.allowed_clients = 127.0.0.1
;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0666
user = www-data
group = www-data
;pm.max_children = 50
pm.max_children = 15
;pm.start_servers = 20
pm.min_spare_servers = 5
;pm.max_spare_servers = 35
pm.max_spare_servers = 10
;pm.max_requests = 500
;pm.status_path = /status
;ping.path = /ping
;ping.response = pong
request_terminate_timeout = 30
;request_slowlog_timeout = 0
;slowlog = /var/log/php-fpm.log.slow
;rlimit_files = 1024
;rlimit_core = 0
;chroot =
chdir = /var/www
;catch_workers_output = yes
Обычно это означает, что ваша конфигурация Fastcgi неправильно настроена для данных и заголовков, которые вы передаете.
Вам нужно будет поиграть со следующими настройками в файле fastcgi_parms:
fastcgi_connect_timeout 90; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 1024K; fastcgi_buffers 8 512k; fastcgi_busy_buffers_size 1024k; fastcgi_temp_file_write_size 1024k; fastcgi_intercept_errors on; fastcgi_pass_header *;
Вышеуказанные настройки взяты с моего сервера разработки, и я использую FirePHP, когда информация заголовка слишком велика (то есть заполняет буферы), я всегда получаю ошибку 502. Следовательно, я сделал буферы действительно большими. Если вы знаете, что именно это и делает ваше приложение, то это хорошее место для начала.
Я бы никогда не использовал указанные выше настройки на производственном сервере, но вы обнаружите, что настройки connect_timeout, send_timeout, intercept_errors и pass_header обычно являются хорошим местом для начала решения 502, если проблема не связана с чрезмерным заголовком / данными.
Мои деньги виноваты в APC. Я видел нечто подобное с apc.include_once_override = On
. Отключение этого (и apc.canonicalize = On
) исправил это для меня.
Я согласен с Беном, что в этом может быть APC. Я обнаружил, что Xcache менее подвержен ошибкам, однако считается, что он старше и менее эффективен в отношении процессора. Тем не менее, поскольку ошибку 502 трудно отследить, я предлагаю вам 'apt-get --purge remove' все ваши пакеты php (в частности, APC и php5-fpm) и просто следовать инструкциям в Howtoforge это сработало для меня из коробки.