当Node.js API宕机时能否配置Nginx停止对外响应请求?
Nginx 配置实现方案
可以通过配置Nginx内置模块实现该需求,核心逻辑是利用上游健康检查能力+Nginx特有的444状态码,在Node API不可用时直接关闭连接不返回响应,触发监控的超时/连接失败判定规则,具体配置步骤如下:
前置确认
你使用的Nginx需要自带ngx_http_proxy_module和ngx_http_upstream_module两个模块,绝大多数主流发行版预编译的Nginx默认都已内置这两个模块,无需额外安装。
具体配置
1. 配置上游服务与健康检查规则
在Nginx配置文件的http块中添加上游服务定义:
http { # 其他全局配置保留不变 upstream node_api { # 替换为你实际Node API的监听地址和端口 server 127.0.0.1:3000 max_fails=1 fail_timeout=3s; keepalive 64; } }
参数说明:
max_fails=1:1次请求失败就标记该节点不可用fail_timeout=3s:节点被标记为不可用后,3秒后会自动重试检测节点是否恢复,你可以根据自身需求调整这两个参数的数值
2. 配置站点代理与异常处理
在对应server块的location规则中添加异常处理逻辑:
server { listen 80; # 替换为你实际的API域名 server_name api.yourdomain.com; location / { proxy_pass http://node_api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 定义哪些场景下认为上游请求失败,自动重试其他节点(单节点场景下也需要保留) proxy_next_upstream error timeout http_502 http_503 http_504; # 所有上游节点都不可用时,拦截502/503/504响应,返回444状态码 # 444是Nginx特有的状态码,会直接关闭TCP连接,不返回任何响应内容给客户端 error_page 502 503 504 =444 /dev/null; } }
配置生效与验证
- 执行
nginx -t检查配置语法是否正确,确认返回syntax is ok和test is successful后再进行下一步 - 执行
nginx -s reload重载Nginx配置,使规则生效 - 测试效果:手动停止Node API服务,此时请求Nginx会直接断开连接,没有任何响应内容,监控工具会识别为请求失败;重启Node API后,等待
fail_timeout设定的时长后,Nginx会自动恢复正常响应。
内容的提问来源于stack exchange,提问作者tontsa28
相关产品推荐
相关产品推荐

