![如何让 nginx 使用与处理当前请求不同的混合体?](https://linux22.com/image/789438/%E5%A6%82%E4%BD%95%E8%AE%A9%20nginx%20%E4%BD%BF%E7%94%A8%E4%B8%8E%E5%A4%84%E7%90%86%E5%BD%93%E5%89%8D%E8%AF%B7%E6%B1%82%E4%B8%8D%E5%90%8C%E7%9A%84%E6%B7%B7%E5%90%88%E4%BD%93%EF%BC%9F.png)
在我们的站点上,我们有一个 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"
欢迎提出任何建议,谢谢。