[nginx] FastCGI + keepalive

Вроде бы всё просто, но есть небольшой хак: вот такая конструкция не будет поддерживать keepalive:

location / {
...
fastcgi_pass 127.0.0.1:9000;
fastcgi_keep_conn on;
...
}

а вот такая будет:

upstream fcgi_backend {
server 127.0.0.1:9000;
keepalive 32;
}
...
location / {
...
fastcgi_pass fcgi_backend;
fastcgi_keep_conn on;
...
}

Почему так — ответ из рассылки nginx.org:

Для поддержания постоянных соединений требуется две вещи:

— Проинструктировать бекенд, чтобы по завершению запроса он соединение не закрывал. Для FastCGI это делает директива fastcgi_keep_conn.

— Включить собственно кеш соединений. Это делает директива keepalive в рамках блока upstream.

При использовании адреса в директиве fastcgi_pass, как в первом примере, создаётся неявный upstream с настройками по умолчанию. Кеша соединений в нём нет, и соответственно постоянные соединения не используются.

Само собой у вас в nginx.conf есть строка:

keepalive_timeout 120;

Помните:  если бекенд умеет обрабатывать только одно соединение — включать keepalive нельзя.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *