NPS加Nginx实现家庭服务器双机主备服务

单台NPS服务器搭配两台家庭NPC服务器,如何实现严格的主备高可用架构?很多博主可能会想到用NPS自带的负载均衡,但那其实是主动-主动模式。今天分享一个进阶玩法:让NPS掌控80/443入口和TCP隧道,引入Nginx在TCP层做反向代理,通过backup参数实现真正的Active-Passive主备。流量平时只走主机,主机挂掉才无缝切换备机,完美榨干单台NPS的价值。

理清角色:NPS做门卫,Nginx做调度员

在单NPS的限制下,我们需要把功能拆解。NPS作为公网入口,监听80和443端口处理域名分发;同时它作为隧道的中转站,为两台家庭NPC分别建立TCP隧道(如8111和8112)。Nginx不再处理公网HTTP,而是监听本机的非标准端口(如8433),接收NPS转来的流量,并在TCP层面进行主备调度。两台家庭NPC则退化成纯粹的服务提供者。

NPS端配置:入口与隧道分离

首先在NPS服务端的Web界面进行操作:

  1. 创建TCP隧道:为主机NPC和备机NPC分别创建一条TCP隧道。服务端端口分别设为8111和8112,目标填它们各自局域网的网站服务地址(如127.0.0.1:80)。
  2. 配置域名转发:在域名管理中添加你的特定域名,内网目标填写127.0.0.1:4433。这样,公网流量到达NPS后,会被直接转给本机的Nginx。

Nginx端配置:TCP层主备切换

这是架构的核心。由于我们代理的是TCP流量,必须使用Nginx的stream模块(注意:不在http块内,而在主配置文件中平级配置)。

stream {
    upstream nps_npc_backend {
        server 127.0.0.1:8111 max_fails=3 fail_timeout=10s; # 主机端口
        server 127.0.0.1:8112 backup; # 备机端口,backup参数是灵魂
    }

    server {
        listen 8433; 
        proxy_pass nps_npc_backend;
    }
}

backup参数确保了Nginx平时只向8111(主机)发送数据。只有当主机连接失败达到设定次数,Nginx才会将流量切到8112(备机)。主机恢复后,流量会自动切回。

NPC端配置:无配置文件的极简接入

得益于NPS的规则下发机制,两台NPC客户端根本不需要在本地写复杂的隧道规则。你只需在启动NPC时指定vkey连接服务端即可:

./npc -server=你的NPS_IP:8024 -vkey=你的验证密钥

NPC连上后会自动识别身份,并从NPS拉取配置。主机NPC绑定8111,备机绑定8112,分别将流量精准地送达到各自的本地网站服务上。这样就实现了规则的集中管理,客户端只需“听话照做”。

博主提示:这种架构下,Nginx的被动健康检查主要探测NPS的隧道端口是否通畅。如果NPC在线但网站服务挂了,Nginx可能无法感知,建议配合NPS的NPC端健康检查功能一起使用,形成双重保险。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

字数:0

字数:0