You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx从1.2.7升级至1.12.x时upstream配置报错求助

Nginx 1.12.x中upstream check指令无效的解决方案

你遇到的这个问题很典型——check指令并不是Nginx官方核心发行版自带的功能,它来自一个叫nginx_upstream_check_module的第三方模块。你在旧版本1.2.7里能正常使用,应该是当时编译Nginx的时候已经把这个模块加进去了,但升级到1.12.x时,如果你没有重新编译并包含这个模块,Nginx就会识别不了这个指令,直接报错。

下面给你两种可行的解决方案,你可以根据自己的需求选择:

方案一:重新编译Nginx 1.12.x,加入第三方健康检查模块

如果你需要完全保留原来的主动健康检查逻辑,就需要把这个第三方模块重新编译进新的Nginx版本里:

  • 先下载适配Nginx 1.12.x的nginx_upstream_check_module源码(注意要找对应版本的分支,避免兼容性问题)
  • 编译Nginx时,在configure命令里加上--add-module=/path/to/nginx_upstream_check_module参数,替换成你实际的模块路径
  • 编译完成后,替换掉旧的Nginx二进制文件,重启服务即可

方案二:改用Nginx官方原生的健康检查方案

Nginx 1.9.0及以上版本(你的1.12.x完全符合)提供了原生的健康检查能力,虽然和第三方模块的主动检查逻辑略有不同,但能满足大部分场景需求:

被动健康检查(HTTP上游通用)

这是最常用的原生方案,它会在请求失败时自动标记服务器为不可用,并切换到其他上游节点,配置示例如下:

upstream a_trusted { 
    server 10.19.81.182:10094; 
    keepalive 1024; 
}

server {
    # 这里保留你原来的server配置,比如监听端口、根目录等
    location / {
        proxy_pass http://a_trusted;
        # 指定哪些情况会触发切换到下一个上游服务器
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        # 设置重试的最大次数
        proxy_next_upstream_tries 3;
        # 设置重试的超时时间
        proxy_next_upstream_timeout 10s;
    }
}

这种方式不需要额外编译模块,完全依赖Nginx核心的ngx_http_proxy_module实现。

主动健康检查(仅适用于TCP/UDP上游,开源版)

如果你的上游是TCP服务,Nginx 1.9.0+的ngx_stream_upstream_module提供了原生的主动健康检查,配置逻辑和你原来的check指令类似;但如果是HTTP上游的主动检查,开源版Nginx没有原生支持,只能选择方案一或者升级到Nginx Plus(商业版)。

补充说明:原来的check指令功能

你原来的配置里,check指令是用来做主动健康检查的:

  • interval=5000:每5秒检查一次上游服务器
  • rise=1:只要1次检查成功,就标记服务器为可用
  • fall=3:连续3次检查失败,标记服务器为不可用
  • timeout=1000:检查请求超时时间为1秒
  • check_http_send:指定发送的健康检查请求内容
  • check_http_expect_alive:指定认为服务器健康的响应状态码范围

内容的提问来源于stack exchange,提问作者MrDuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:25:26