一个公网IP带七台服务器的核心答案是:通过反向代理+域名分流+端口映射的组合拳,让一台入口服务器充当“门卫”,把流量按域名或端口转给内网七台机器,每台服务器各干各的活。
很多朋友手里攒了七台服务器,硬件性能没问题,结果一看公网IP只分配了一个,瞬间觉得白折腾了,先别急,这种场景在IDC机房里太常见了,业内的做法从来不是给每台机器都塞一个公网IP,那成本扛不住,而是在网络入口处做文章,你需要的是一台带公网IP的“入口机”,配合内网局域网转发,把七台服务器的能力全部暴露出去,这套方案成熟、稳定,而且网上能查到的开源工具都够用。
一个公网IP到底怎么分给七台服务器
要弄懂这个问题,咱们得先把数据流跑一遍,用户的请求通过网络到达你这个唯一的公网IP,入口服务器(咱们叫它网关机)先收到这个请求,看一眼域名或者端口,然后按照提前定好的规则,转发给内网具体的某台服务器,这台内网服务器处理完,返回数据,再原路回到用户手里,整个过程用户感知不到中间还有一层,他以为访问的就是那台真正的业务服务器。
一个公网IP撑起七台服务器的架构核心可以拆成三块:
- 域名解析:把多个域名全部A记录解析到这个公网IP上。
- 端口复用或映射:对外只开80和443,或者开多个高端口,把不同流量导到不同内网IP。
- 内网回源:七台服务器通过局域网互相通信,网关机能访问到内网每一台的业务端口。
Nginx反向代理域名分流,一个IP扛七台
这是最推荐的生产环境方案,你只需要一台配置稍微好点的网关机,装个Nginx,然后按照不同域名把请求分发出去,这里的核心逻辑不是“一个IP配七台服务器”,而是“七台服务器共用一个入口”。
一个ip地址可以绑定几个域名
从技术底层上说,一个IP地址能绑定的域名数量没有硬性上限,DNS解析本身就支持百万级记录指向同一个IP,所以别担心绑多了会出问题,真正限制你的是服务器的处理能力,就算你有七台内网服务器,需要七个域名,全部A记录指到一个公网IP上,一点毛病没有。
操作路径很简单:
- 在DNS服务商后台,为七个业务域名分别添加A记录,IP全部填你那个唯一的公网IP。
- 网关机安装Nginx(一般用apt或yum装就行)。
- 在Nginx的配置目录里,为每个域名写一个独立的server块。
配置逻辑大概是这样的感觉:
server {
listen 80;
server_name web1.example.
com;
location / {
proxy_pass http://192.168.1.101:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name web2.example.com;
location / {
proxy_pass http://192.168.1.102:8080;
proxy_set_header Host $host;
...
}
}
以此类推,写七个这样的server块,分别指向192.168.1.101到192.168.1.107,改完配置,执行nginx -t检查语法,然后nginx -s reload平滑重载,七台服务器立刻就有了对外服务能力。
七台服务器共用443端口和SSL证书怎么处理
如果业务都用HTTPS,你可能担心一个IP只能配一张证书,早期HTTP时代确实存在这个限制,但现在SNI(服务器名称指示)技术已经非常成熟,简单说,客户端在建立TLS握手时会直接告诉服务器,他要访问哪个域名,Nginx根据这个域名信息,直接从对应路径调出该域名的证书,七台服务器各自用各自的证书,互不干扰,全部走443端口。
行业共识认为,SNI扩展已经是所有主流浏览器和操作系统的默认标配,兼容性问题基本可以忽略,具体操作就是在每个server块里,加上证书文件路径,比如ssl_certificate /etc/nginx/ssl/web1.pem; 和 ssl_certificate_key /etc/nginx/ssl/web1.key;,证书申请可以用Let’s Encrypt免费版,域名多也就多签几张的事。
IP+端口映射,适合不介意端口号的人
如果你手头只有一两个域名,或者业务系统是给内部人员用的,访问时带个端口号完全无所谓,那直接用端口映射方案,节省一台反向代理网关机,让路由器或防火墙直接把请求转到内网不同机器。
你还是一台公网IP,但对外开多个端口号,比如10001到10007,每个端口对应内网一台服务器,用户访问时输地址是IP加端口,端口后面链路到内网某台服务器的8080。
要真给这个方法起个名字,它叫双向NAT映射,配置入口一般在你的路由器或云安全组里:
- 外网端口10001 → 内网IP 192.168.1.101的8080端口
- 外网端口10002 → 内网IP 192.168.1.102的8080端口
- 外网端口10003 → 内网IP 192.168.1.103的8080端口
一直写到10007,这样七台服务器全部可达,代理层都不用额外维护,适合纯API服务、测试环境、数据同步接口这类对URL看起来是否美观不敏感的场景。
nginx反向代理和端口映射的区别
这两者的区别,说白了就是一个工作在七层(应用层),一个工作在四层(传输层),反向代理最明显的优势是,无论你后端有七台还是一百台服务器,用户永远只访问你的域名和80/443端口,他不需要知道也没必要知道你后端有几台机器、用的是什么端口,而端口映射直接把具体端口暴露给用户,用户访问API时还得记住每个端口对应哪个服务,对公网用户就不太友好。
反向代理还能做请求头改写、超时控制、缓存、限流,端口映射则更像一个纯粹的搬运工,把数据包从外面的端口倒进内网服务器的端口,原样传输,想明白这层区别,你就能针对不同业务选不同方案了。
SNI分流,多台服务器共用443端口
还有一种更高级的玩法,适合那种七台服务器都要对外提供服务、都要走443端口的场景,你不用七层Nginx做HTTP代理,而是直接用HAProxy做四层TCP转发,根据SNI里的域名信息,判断该把数据包交给哪台内网服务器。
这么做的好处是什么?减少了代理层的连接开销,Nginx七层代理要终结HTTP请求再重新发起连接,HAProxy四层转发直接透传加密数据流,转发效率高不少,尤其适合大流量传输业务。
举个例子,HAProxy配置大概这个样子:
frontend https_front
bind :443
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend web1_cluster if { req_ssl_sni -i web1.example.com }
use_backend web2_cluster if { req_ssl_sni -i web2.example.com }
每个后端集群里写一台内网服务器IP和端口,这样七台服务器各自的Nginx、Apache或者Tomcat,都能独立处理自己的TLS握手,网关机只负责“送货上门”。
多台服务器共用443端口时内网服务器怎么配置
内网服务器不用做任何特殊改动,它们继续用自己本地的443端口或者8080端口都可以,唯一要确保的是,防火墙规则里,只允许网关机访问内网服务器的业务端口,其余外部流量全部拒绝,这是安全红线,别图省事把内网端口也暴露在公网。
七台服务器都藏在内网,数据交互怎么打通
如果你这七台服务器没有直连公网,那么它们之间建议走独立的内网VLAN,网关机有一个内网IP能访问到每一台,把VPC(虚拟私有云)里的路由表配好,网关卡设在最前面,七台机器全部绑定内网网段的静态IP,这样数据在里面跑得快,不走公网绕圈子,延迟也低。
如果七台服务器分散在不同物理位置,比如一台在北京,一台在杭州,那就得考虑FRP内网穿透了,把入口公网IP的机器当服务端,七台远端机器当客户端主动连上来,形成一条隧道,这也是多台内网服务器共用一个公网IP的常见变体,常用于家庭宽带或临时组网,动态公网IP的话,再搭配DDNS服务把域名动态解析过去就行了。
容易被忽略的配置细节和排错思路
方案看着简单,实际配置完总有人遇到“网站打不开”的问题,根据我接触到的踩坑案例,绝大多数情况出在内网防火墙、回源地址和代理缓存这三处。
首段加粗的答案直接放结论,后面用一个H2收尾一些常见故障排查也可以。
内网防火墙如何放行
七台被代理的服务器上,有时自带firewalld或ufw防火墙,默认策略是拒绝来自其他机器的访问,你需要放行网关机IP到业务端口的流量,用iptables或ufw allow from 192.168.1.200 to any port 8080,这里的192.168.1.200是网关机内网IP,如果防火墙没放行,Nginx就会报502 Bad Gateway,因为网关机和内网服务器之间的那条路没通车。
回源地址为什么要设置
反向代理模式下,后端服务器看到的客户端IP是网关机的内网IP,而不是真实访客的IP,如果你的业务系统有用户登录日志或IP封禁需求,必须告诉应用层去读X-Forwarded-For请求头,Nginx里那两行proxy_set_header配置不是可有可无的,直接关乎你业务数据的准确性。
带宽峰值是不是瓶颈
据公开统计,国内主流云厂商的单台云主机带宽通常按Mbps计费,一个公网IP绑定的带宽是固定的,就算你后端有七台服务器,出口带宽也只有那么大,如果七台机器里有一台业务流量暴增,把带宽占满,其他六台的服务延迟立马升高,解决办法是给网关机配带宽上限的监控告警,必要时在网关机做流量整形,给每台后端服务器分配最大出口带宽配额。
关于一个公网IP配置多个服务器的常见问题
一个公网IP能绑定多少个域名
从解析和Nginx层面看是不受限制的,你甚至可以绑几十个域名,只要服务器CPU和内存能扛住连接数,实际操作中,云服务商对单个IP的解析次数和并发连接数会有默认限制,如果超了会触发新建连接数保护,平时绑七八个域名、跑日常业务量的话,不用考虑这个硬上限。
动态公网IP怎么固定访问入口
动态公网IP意味着这个IP会变,域名解析记录也得跟着变,给每台后端服务器再配一个固定的内网地址不影响对外业务入口,你可以使用DDNS服务,在网关机上装一个更新脚本,每分钟检查一次公网IP变化,变了就自动调接口改DNS记录,只要DDNS服务不宕机,域名访问就一直是通的。
七台服务器共用443端口,证书文件要装在网关机还是业务机
如果是方案一(Nginx反向代理),证书装在网关机,因为由网关机终止TLS加密,如果是方案三(HAProxy的SNI四层分流),证书装在各业务服务器上,因为TLS握手发生在每台业务机自己那里,还有一种混合模式,网关机只做TCP透传不读数据,那证书全在业务侧,选哪种取决于你对密钥管理的要求。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/601564.html




