Недавно я перевел свой сервер на nginx и php-fpm, избавившись от apache. Это помогло улучшить скорость моего сайта.
Кажется, все работает нормально, пока я не столкнулся с этой проблемой, я заметил, что nginx продолжает выдавать ошибки тайм-аута соединения только для определенных IP-адресов. Один из IP-адресов - это IP-адрес моего офиса, у нас есть бэкэнд, доступ к которому осуществляется из нашего офиса в течение дня.
Я использую supervisord для запуска 3 процессов php-fpm с рабочими, это моя типичная конфигурация php-fpm
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 300
Поскольку у меня есть сервер с 4 ядрами и 2 ГБ оперативной памяти, это моя установка nginx
worker_processes 4;
worker_rlimit_nofile 8192;
events {
worker_connections 1024;
use epoll;
multi_accept off;
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 55;
recursive_error_pages on;
server_name_in_redirect off;
server_tokens off;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 8k;
large_client_header_buffers 4 32k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
fastcgi_connect_timeout 120;
fastcgi_send_timeout 120;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
Где я ошибаюсь с конфигурацией, я пробовал различные настройки, но проблема все еще сохраняется.
Это ошибки, которые я получаю
2011/11/13 18:20:33 [error] 21583#0: *311683 upstream timed out (110: Connection timed out) while reading response header from upstream, client: IP, server: tastykhana.in, request: "GET url HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.socket:", host: "tastykhana.in", referrer: "url"
«Тайм-аут апстрима истек» говорит вам, что бэкэнд (в вашем случае это php-fpm) не отправляет ответ вовремя. Так что если вы увеличите таймаут nginx - посмотрите на php-fpm. Может это даун с ядром? Или создает огромный запрос к БД?