gpt4 book ai didi

Nginx 不会在上游找不到主机的情况下启动

转载 作者:行者123 更新时间:2023-12-03 08:49:53 24 4
gpt4 key购买 nike

我使用 nginx 代理并为我保持与远处服务器的持久连接。

我已经配置了大约 15 个类似于此示例的块:

upstream rinu-test {
server test.rinu.test:443;
keepalive 20;
}
server {
listen 80;
server_name test.rinu.test;
location / {
proxy_pass https://rinu-test;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
}
}

问题是如果在 upstream 中的一个或多个中无法解析主机名块,nginx 不会(重新)启动。我也不能使用静态 IP,其中一些主机明确表示不要这样做,因为 IP 会改变。我所看到的针对此错误消息的所有其他解决方案都说要摆脱 upstream并在 location 中执行所有操作堵塞。这是不可能的,因为 keepalive仅在 upstream 下可用.

我可以暂时承受失去一台服务器,但不能承受全部 15 台。

编辑:
原来 nginx 不适合这个用例。应使用替代后端(上游)保活代理。自定义 Node.js 替代方案位于 my answer .到目前为止,我还没有找到任何其他真正有效的替代方案。

最佳答案

早期版本的 nginx(1.1.4 之前)已经为全局大量访问量最大的网站提供支持(如果可以相信服务器 header ,有些甚至现在仍然支持),甚至不支持 keepalive upstream 一方面,因为在数据中心设置中这样做几乎没有什么好处,除非您的各个主机之间存在非平凡的延迟;见 https://serverfault.com/a/883019/110020一些解释。

基本上,除非您知道您特别需要在上游和前端之间保持事件状态,否则它很可能只会使您的架构的弹性降低和恶化。

(请注意,您当前的解决方案也是错误的,因为 IP 地址的更改同样不会被检测到,因为您仅在配置重新加载时进行主机名解析;因此,即使 nginx 启动,一旦 IP 地址基本上会停止工作的上游服务器确实发生了变化。)

可能的解决方案,选择一个:

  • 最好的解决方案似乎只是摆脱 upstream keepalive在数据中心环境中可能不需要,并使用带有 proxy_pass 的变量用于每个请求的最新 DNS 解析(nginx 仍然足够聪明,仍然可以缓存此类解析)
  • 另一种选择是通过商业订阅获得付费版本的 nginx,它有 resolve server 的参数upstream 中的指令语境。
  • 最后,尝试的另一件事可能是使用 set variable和/或 map 指定 upstream 内的服务器;既未证实也未否认已实现;例如,它可能有效,也可能无效。
  • 关于Nginx 不会在上游找不到主机的情况下启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248522/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com