Вроде бы всё просто, но есть небольшой хак: вот такая конструкция не будет поддерживать 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 нельзя.