【亲测有效】nginx负载均衡指定ip端口转发,做自动切换
nginx如何做到?监听两个目标公网ip,这两个目标ipA,ipB 是做了iptables的转发,按照端口转发的,例如我访问ipA的3333端口就转发某个squid代理x上,访问ipB的3333端口也转发到同一个squid代理x上。现在我访问nginx的3333端口,默认都走ipA转发,只有发现ipA不通或ipA转发不成功时ngnix自动切换到走ipB,我不用动任何代码。
可以通过配置 NGINX 的 stream
模块来实现。这个模块支持 TCP/UDP 的负载均衡与代理。你可以配置 NGINX 监听在一个端口,然后在检测到 IP A 不可达的情况下自动切换到 IP B。
下面是 NGINX 配置示例:
stream {
upstream squid_backend {
server ipA:3333 max_fails=3 fail_timeout=30s; # ipA的转发地址
server ipB:3333 backup; # ipB的转发地址,作为备份
}
server {
listen 3333; # 监听的公网端口
proxy_pass squid_backend;
proxy_connect_timeout 1s;
proxy_timeout 10s;
}
}
配置说明:
-
upstream块:
ipA:3333
:配置第一个目标 IP 和端口。max_fails=3 fail_timeout=30s
:在 30 秒内如果失败 3 次则标记该服务器为不可用。ipB:3333 backup
:配置第二个目标 IP 和端口,backup
表示只有在ipA
不可用时才会使用ipB
。
-
server块:
listen 3333
:Nginx 监听的端口,这个端口将接收外部请求。proxy_pass squid_backend
:将请求转发到定义的upstream
中的服务器。proxy_connect_timeout 1s
:设置连接超时时间为 1 秒。proxy_timeout 10s
:设置请求超时时间为 10 秒。
操作逻辑:
当用户访问 NGINX 的 3333 端口时,Nginx 会默认将请求转发到 ipA:3333
。如果 ipA
无法连接或连续 3 次连接失败,那么 NGINX 会自动切换到 ipB:3333
,不需要你修改任何代码。
请确保你已经编译 NGINX 时启用了 stream
模块,因为这个模块不是所有 NGINX 版本都默认启用的。
通过这种配置,可以达到你所需要的在 ipA
不可用时自动切换到 ipB
的效果。
代码学习,前言技术分享,深度分析编程技术,普及科普编程技术,天天都要敲代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)