如何让 nginx 使用与处理当前请求不同的混合体?

如何让 nginx 使用与处理当前请求不同的混合体?

在我们的站点上,我们有一个 12 个 mongrel 集群正在运行,而在我的本地开发版本中,我有一个 5 个 mongrel 集群。nginx( version: nginx/1.22.0) 位于最前面。

我们的一个流程通过使用命令行工具 wkhtmltopdf 来制作 pdf,该工具随后调用网站获取页面,然后将其转换为 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 配置中,我一直试图让它使用与当前繁忙的 mongrel 不同的 mongrel,但没有成功 - 它似乎总是随机选择一个,因此有 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选项,但第二次或第三次尝试时,它们都再次处于 mongrel 1 状态。

round_robin读完后尝试了一下,但是出现了一个错误 -nginx: [emerg] unknown directive "round_robin"

欢迎提出任何建议,谢谢。

相关内容