Как заставить nginx использовать другую дворнягу, отличную от той, которая обрабатывает текущий запрос?
На нашем сайте работает кластер из 12 дворняг, а в моей локальной версии для разработчиков у меня есть кластер из 5 дворняг. nginx (version: nginx/1.22.0
) сидит впереди.
Один из наших процессов создает PDF-файл, вызывая wkhtmltopdf, инструмент командной строки, который, в свою очередь, вызывает веб-сайт, чтобы получить страницу, которую затем преобразует в PDF-файл.
То работает, только вот иногда запрос на страницу идет к той же дворняге (всегда дворняге 1), которая обкошелилась, и тогда у меня тупик - первый запрос ждет завершения второго, а вот второй находится в очереди после первого.
Mongrel Top (delay: 0.25) Fri Sep 22 16:47:59 2023
65347 sh -c start -p 3000 & mongrel_rails start -p 3001 & mongrel_rails start -p 3002 & mongrel_rails start -p 3003 & mongrel_rails start -p 3004
65348 [3000/2/11]: handling 127.0.0.1: POST /admin/school_quotes/CMS1Y-187790-107226, 127.0.0.1: GET /
65349 [3001/0/0]: idle
65350 [3002/0/0]: idle
65351 [3003/0/0]: idle
65352 [3004/0/0]: idle
6 process(es)
В моей конфигурации nginx я пытался заставить его использовать другую дворнягу, отличную от той, которая сейчас занята, но безуспешно - кажется, что всегда просто кажется, что он выбирает одну наугад, и поэтому имеет 20% шанс выбрать тот же и запирается. (хотя по ощущениям это больше похоже на 50%)
Соответствующий блок конфигурации nginx на данный момент выглядит так:
upstream elrs {
# least_conn;
# random two;
# round_robin;
zone backends 128k;
server 127.0.0.1:3000 max_conns=1 max_fails=3 fail_timeout=2;
server 127.0.0.1:3001 max_conns=1 max_fails=3 fail_timeout=2;
server 127.0.0.1:3002 max_conns=1 max_fails=3 fail_timeout=2;
server 127.0.0.1:3003 max_conns=1 max_fails=3 fail_timeout=2;
server 127.0.0.1:3004 max_conns=1 max_fails=3 fail_timeout=2;
}
я установилmax_conns
до 1 на всех, кто думал, что это может исправить ситуацию, но этого не произошло. Я также попробовалleast_conn
вариант, но во второй или третий раз, когда я попробовал, они оба снова оказались на дворняге 1.
Я пыталсяround_robin
после прочтения об этом, но я получаю сообщение об ошибке -nginx: [emerg] unknown directive "round_robin"
Любой совет ценен, спасибо.