Routing 1个IP但多个Web服务器的子域

Routing 1个IP但多个Web服务器的子域,routing,webserver,subdomain,ipv4,Routing,Webserver,Subdomain,Ipv4,在一个IP上托管多个网站的传统方法是使用共享主机,并为每个站点使用Apache virtualhost配置。因此,不同的域名根据virtualhost查找映射到不同的站点,但它们都位于同一IP。然而,我想知道: 可以在一个专用LAN上有多个Web服务器,所有这些服务器都可以通过一个面向公共的路由器/dns/使用单个公共IP的任何设备在端口80上访问。 理想情况下,子域可以访问不同的服务器,如server1.my-site.com和server2.my-site.com。如果允许您的Web服务器通

在一个IP上托管多个网站的传统方法是使用共享主机,并为每个站点使用Apache virtualhost配置。因此,不同的域名根据virtualhost查找映射到不同的站点,但它们都位于同一IP。然而,我想知道:

可以在一个专用LAN上有多个Web服务器,所有这些服务器都可以通过一个面向公共的路由器/dns/使用单个公共IP的任何设备在端口80上访问。

理想情况下,子域可以访问不同的服务器,如server1.my-site.com和server2.my-site.com。如果允许您的Web服务器通过端口转发在不同端口上为网站提供服务,那么这很容易做到,但我需要外部世界不必知道要连接哪个端口,只需将server1.my-domain.com输入到浏览器中,而不是server1.my-domain.com:1234


这只是一个问题,因为IPv4地址越来越少,而IPv6还没有“准备就绪”。

是的。您必须将路由器设置为反向代理,并根据
主机
头或请求URL将HTTP请求转发到专用网络中的一台主机。当涉及反向代理时,它是一个流行的选择

如果要代理HTTP、SMTP或IMAP服务器以外的服务,则需要使用iptables,例如

iptables -t nat -A PREROUTING -d $DOMAIN_NAME -j DNAT --to-destination $SERVER2_IP
iptables -t nat -A POSTROUTING -j MASQUERADE

是的。您必须将路由器设置为反向代理,并根据
主机
头或请求URL将HTTP请求转发到专用网络中的一台主机。当涉及反向代理时,它是一个流行的选择

如果要代理HTTP、SMTP或IMAP服务器以外的服务,则需要使用iptables,例如

iptables -t nat -A PREROUTING -d $DOMAIN_NAME -j DNAT --to-destination $SERVER2_IP
iptables -t nat -A POSTROUTING -j MASQUERADE

Stefano的解决方案只有在路由器上安装Nginx才有效。如果不可能,请在路由器后面的服务器上安装反向代理(Nginx/Squid/Apache等)。端口将流量从路由器转发到反向代理服务器。设置反向代理以将流量转发到网络中的不同服务器。

Stefano的解决方案仅在可以在路由器上安装Nginx的情况下有效。如果不可能,请在路由器后面的服务器上安装反向代理(Nginx/Squid/Apache等)。端口将流量从路由器转发到反向代理服务器。设置反向代理以将流量转发到网络中的不同服务器。

谢谢。我认为Nginx可以代理所有的TCP端口类型,所以这不仅仅适用于web服务器?例如,我可以使用这样一个系统来运行几个minecraft服务器吗?不,Nginx只处理HTTP、SMTP和IMAP。我不知道Minecraft采用什么协议,但是如果它是基于原始TCP,那么你应该使用
iptables
并设置转发规则。啊,所以我想要这样的东西:
iptables-t nat-a PREROUTING-d$DOMAIN\u NAME-j DNAT-到目的地$SERVER2\u IP
[下一行]
iptables-t nat-a POSTROUTING-j MASQUERADE
(但是这将阻止辅助主机使用vhosts)是的。关于vhosts,我想Minecraft没有vhosts的概念,所以您应该可以。关于HTTP,Nginx将保留URL和主机头,因此vhosts应该可以正常工作。@Programster:-d将解析代理端的$DOMAIN_名称(一次,在将地址提交到内核之前,引用manpage)。想想看,代理如何知道客户端用于检索共享IP的主机名?客户端必须以某种方式发送该主机名,这就是HTTP主机头的用途。许多协议都提供这类信息(例如TLS有SNI)他们通常在
vhost
总括术语下使用它。然而,有些协议没有(我怀疑Minecraft没有,可能是错的)。当他们这样做的时候,你永远不会只使用iptables,它总是特定的。谢谢。我认为Nginx可以代理所有的TCP端口类型,所以这不仅仅适用于web服务器?例如,我可以使用这样一个系统来运行几个minecraft服务器吗?不,Nginx只处理HTTP、SMTP和IMAP。我不知道minecraft采用什么协议,但如果它是b基于原始TCP,然后您应该使用
iptables
并设置转发规则。啊,我想要这样的东西:
iptables-t nat-a PREROUTING-d$DOMAIN\u NAME-j DNAT-到目的地$SERVER2\u IP
[下一行]
iptables-t nat-a POSTROUTING-j MASQUERADE
(但是这将阻止辅助主机使用vhosts)是的。关于vhosts,我想Minecraft没有vhosts的概念,所以您应该可以。关于HTTP,Nginx将保留URL和主机头,因此vhosts应该可以正常工作。@Programster:-d将解析代理端的$DOMAIN_名称(一次,在将地址提交到内核之前,引用manpage)。想想看,代理如何知道客户端用于检索共享IP的主机名?客户端必须以某种方式发送该主机名,这就是HTTP主机头的用途。许多协议都提供这类信息(例如TLS有SNI)他们通常在
vhost
总括术语下使用它。然而,有些协议没有(我怀疑Minecraft没有,可能是错的)。当他们这样做时,你永远不会只使用iptables,它总是很具体。谢谢你。是的,如果我在家里设置这个,那就是我需要做的。谢谢你。是的,如果我在家设置这个,那就是我需要做的。