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

如何配置Nginx 1.13.10:gRPC上游主机不存在时不崩溃

我之前在维护老版本Nginx的gRPC配置时也遇到过这个坑!当直接用grpc_pass指向未启动的后端服务时,1.13.x版本的Nginx会因为无法建立初始连接直接崩溃,根本等不到后续的请求处理。下面是亲测有效的解决办法:

核心思路

通过upstream块统一管理gRPC后端服务,配置连接失败的容错参数,让Nginx在后端未启动时不会直接崩溃,而是进入“尝试重连”的容错逻辑。

修改后的完整配置
events {
    multi_accept on;
    worker_connections 16384;
    use epoll;
}
http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent"';

    # 定义gRPC后端的upstream块,配置容错规则
    upstream foo_grpc_backend {
        server foo:8088;
        # 连续失败max_fails次后,标记后端不可用10秒,之后自动重试
        max_fails 3;
        fail_timeout 10s;
    }

    server {
        listen 80 http2;
        access_log /dev/stdout main;

        location /foo.test {
            grpc_pass grpc://foo_grpc_backend;
            # 可选:当请求遇到错误/超时,自动重试(单后端时也能避免请求直接挂掉)
            grpc_next_upstream error timeout;
        }
    }
}
关键配置说明
  • upstream块:把后端连接逻辑抽离出来后,Nginx启动时不会因为单个后端不可用就崩溃,而是会按照配置的规则尝试后续重连。
  • max_fails & fail_timeout:这两个参数配合使用,max_fails设置连续失败的次数阈值,fail_timeout设置标记后端不可用的时长,超时后Nginx会自动尝试重新连接后端服务。
  • grpc_next_upstream:可选配置,当请求遇到错误或超时的时候,会触发重试逻辑(即使只有一个后端,也能让请求返回标准的gRPC错误,而不是导致Nginx进程崩溃)。

这个配置在Nginx 1.13.10上完全适用,能让Nginx在后端服务未启动的情况下正常启动运行,等后端服务上线后自动恢复转发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:15