![是否可以在同一个端口(例如 80)上托管具有不同 IP 的多个服务器?](https://linux22.com/image/745911/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%90%8C%E4%B8%80%E4%B8%AA%E7%AB%AF%E5%8F%A3%EF%BC%88%E4%BE%8B%E5%A6%82%2080%EF%BC%89%E4%B8%8A%E6%89%98%E7%AE%A1%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%20IP%20%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我正在尝试设置多个网站域名,但是它们来自不同的服务器,并且由于它们是不同的服务器,因此它们具有不同的 IP,我想知道我是否可以将每个域名的端口转发到 80,到目前为止,当我尝试将多个 IP 端口转发到端口 80 时,我收到一条错误消息,提示“哎呀,本地起始端口重叠!”我必须更改路由器上的选项和设置吗?还是怎样?
答案1
我不太清楚您想要实现什么,但我认为您的设置如下:
- 你有一个公共 IP 地址(例如你的家庭路由器)
- 您在内部网络上有多台服务器,每台服务器都托管自己的网站
- 您想要将同一个端口 (TCP/80) 转发到多个服务器。
我想知道你为什么要将网站托管在不同的服务器上。你可以配置 Apache/nginx/... 进行虚拟托管,这样所有具有不同域名的网站都托管在同一台服务器上,并使用相同的 IP 地址。
另一个选项是将所有网络流量转发到反向代理服务器,例如 HAProxy。此机器将接收端口 80 上的所有流量,并根据 HTTP Host 标头决定将流量转发到哪个物理服务器。这样,您就可以在单独的服务器上托管每个网站(域)。
答案2
你应该学会如何HTTP作品:
- 网络浏览器将域名转换(解析)为 IP 地址。
- Web 浏览器连接到 IP 地址,通常在端口 80 上(参见传输控制/IP)。端口基本上允许连接到同一 IP 上的多个服务(多路复用)。
- 网络浏览器发送网址他对网络服务器感兴趣,包括域名部分。
现在,您有几个问题需要解决:
- 您的服务器可能不在互联网上,但您的网关在。20-30 年前有一种丑陋的黑客攻击让您误以为它们在互联网上:NAT。因此,您可以将路由器的(唯一)端口 80 转发到内部主机。还有一个 20 年前的正确解决方案,它可以为每个主机提供一个公共 IP:IPv6。
- 单个程序需要为所有域提供内容。但是,这个程序可以是反向代理,例如nginx反向代理本身不拥有(托管)内容,而是根据请求中的 URL 联系其他 Web 服务器。这些 Web 服务器也可以拥有与代理位于同一网络中的私有 IP 地址。
编辑:简而言之,您不能将同一端口转发到多个主机。要么使用单个服务器,要么使用反向代理。