Как заставить 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"

Любой совет ценен, спасибо.

0 ответов

Другие вопросы по тегам