一个路由器下面有两台电脑各有一个网站一个域名怎么样才能两个

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
姜彩行

网站  2026-10-02 16:48:01   320

一个路由器下面有两台电脑各有一个网站一个域名怎么样才能两个

一个路由器下面挂着两台电脑,每台电脑上跑着一个网站,各自还有一个域名,想让外面的人访问a.com看到电脑A的网站,访问b.com看到电脑B的网站。这事儿卡在哪儿?家里宽带通常只有一个公网IP,路由器做NAT,外网进来的请求默认只能转到一台内网机器的一个端口上。两个域名都解析到这个公网IP,但路由器没法根据域名区分该转给谁。所以得想办法让路由器或者内网某台机器来分辨域名。

最直接但不太优雅的办法是端口映射加不同端口。在路由器里把外网8080端口映射到电脑A的80端口,外网8081映射到电脑B的80端口。域名解析都指向公网IP。访问时得写成a.com:8080和b.com:8081。能用,但域名后面带端口号很别扭,很多场景比如微信开发、HTTPS证书都不方便。所以只适合临时测试。

更靠谱的做法是反向代理。找一台机器当“门卫”,所有外网请求先到它这儿,它看请求的域名,再分发给对应的网站。这台机器可以是电脑A,也可以是路由器本身(如果刷了OpenWrt之类能装Nginx)。以电脑A为例,先把它自己原来的网站改成监听8080端口,别占着80。然后在电脑A上装Nginx,让它监听80。配置两个server块:一个server_name写a.com,location /里proxy_pass http://127.0.0.1:8080;另一个server_name写b.com,proxy_pass http://192.168.1.101:80(假设电脑B的IP是192.168.1.101)。路由器上把外网80端口转发到电脑A的80端口。域名那边,a.com和b.com的A记录都指向你家宽带的公网IP。这样外网访问a.com,请求到路由器,转到电脑A的Nginx,Nginx一看Host是a.com,就转给本机8080;访问b.com,Nginx一看Host是b.com,就转给电脑B的80。两个域名都走标准80端口,外面完全看不出区别。

这里有几个细节要注意。电脑B的防火墙得允许来自电脑A的访问,否则Nginx代理过去会被拦。电脑A的Nginx配置里,proxy_set_header Host $host; 这行要加上,不然电脑B上的网站可能拿不到正确的域名。还有HTTPS的话,可以在Nginx上给两个域名分别申请证书,配置443端口,然后路由器把443也转发到电脑A。这样两个网站都能用https。

公网IP会变,所以得配DDNS。路由器里一般有DDNS功能,填上花生壳、dynv6或者阿里云DNS的账号,它自动把域名解析更新到当前公网IP。如果路由器没有,可以在电脑A上跑个DDNS客户端。另外有些宽带压根没公网IP,比如移动、联通很多地区给的是大内网地址。那就得先打客服电话申请公网IP,或者改用IPv6。现在不少地区宽带已经下发IPv6地址,每台电脑都能拿到一个公网IPv6。域名解析加AAAA记录,分别指向电脑A和电脑B的IPv6地址,路由器防火墙放行入站。这样连反向代理都不用,直接各走各的。但IPv6地址也会变,同样需要DDNS,而且有些网络环境IPv6不通,访问者可能连不上。

如果实在搞不到公网IP,还有内网穿透的路子。用frp或者ngrok,需要一台有公网IP的服务器做中转。在服务器上跑frps,两台电脑上跑frpc,分别把本地80端口映射到服务器的不同端口,或者用子域名区分。比如a.frpserver.com指向电脑A,b.frpserver.com指向电脑B。然后你自己的域名CNAME到这些子域名。这办法不依赖家庭宽带公网IP,但得有台服务器,而且流量走中转,速度受服务器带宽限制。适合小型网站或者测试。

综合来看,家里有公网IP的话,反向代理加端口映射加DDNS是最省事、最稳定的。一台旧电脑或者树莓派就能当反向代理,功耗低。配置一次,后面基本不用管。记得把路由器的端口转发规则写清楚,只开放必要的80和443,别把内网其他端口暴露出去。安全上,Nginx可以加一些限制,比如只允许特定IP访问管理后台。这样两个域名、两个网站,在一个路由器下面就能各就各位,互不干扰。