这是关于DNS /主机名parsing到IP /端口的典型问题
我在端口80上运行一个Web服务器,在端口87上运行一个Web服务器。我想使用DNS,以便www.example.com进入端口87.我怎样才能使用DNS来完成这项工作?
我正在非标准端口上的服务器上运行服务。 我怎样才能让客户端自动连接到这个非标准端口? 我可以使用DNS吗? 是否有一些应用程序特定的支持,DNS可以指示IP和端口?
一些应用程序协议是否特别支持主机名知识,并根据这些信息进行特殊的操作? 服务器故障还有其他的问题涉及其中的一些吗?
Commandeering:
这个问题最初是关于在同一台服务器上运行IIS和Apache,但是同样的概念可以应用于从客户端接收连接的任何服务器软件。 以下答案描述了使用DNS和应用程序协议支持为客户端分配端口号以进行连接的技术问题和解决scheme。
你不能使用DNS指向一个端口(除非客户端支持SRVlogging,大多数不支持)。
你将不得不采取一些前端方法来做到这一点。 通常,您可以使用前端Web服务器或专用代理软件,根据标头中所请求服务器的名称,将端口80与端口80之间的连接转发。 一些防火墙也可以根据主机头来转发。
某些客户端支持查找指定服务的服务器的主机名和端口号的SRVlogging(即用户指定“example.com”,客户端查找SRVlogging并在端口“255”上获得“server101.example.com” “然后连接到)。 有些客户也可以在不需要的地方实现这个function(例如,当我build立一个新的电子邮件帐户时,我的最后一个智能手机会查找SRVlogging)。
不幸的是,对SRVlogging的支持是非常罕见的。 只有几个值得注意的协议要求支持(Jabber / XMPP,Kerberos,LDAP,SIP),即使在强制要求时,也不是每个客户端都支持它。
当您在浏览器中键入http://www.domain.com时 ,可以理解HTTP端口是80.因此,如果您已经有服务,则没有直接的方法将www.domain.com指向端口87在IIS中的该端口上运行。
这就是说,有一些“解决方法”。
山姆是正确的,DNS是不可知论的,当谈到端口。 任何types的端口redirect都会在该端口上运行的服务发生。 因此,如果您别无select,只能将其保留在端口80上,则需要使用IIS来做到这一点。
我也通过在Apache上使用mod_proxy来解决你的情况,不知道是否有办法用IIS来做到这一点。
恐怕域名只能与IP地址关联,而不能与端口关联。
大多数Web服务器,例如(Apache,IIS等),通过使用Web请求包含标识请求本身中的域的主机头字段的事实,允许您在相同的IP地址上托pipe两个域。
如果你说什么你正在使用的Web服务器,我相信人们可以指出你的相关文件来设置你的服务器,如你所愿
从技术上讲,您可以使用RFC 2782中定义的DNS服务器上的SRVlogging来告诉浏览器哪些服务器处理(子)域的端口上的http:
_http._tcp.www.example.com. IN SRV 0 5 80 www.example.com. _http._tcp.www2.example.com. IN SRV 0 5 87 www.example.com.
这适用于很多协议/服务,特别是在协议规范中已经定义了SRVlogging的使用的情况下。
然而,正如这个“ 耻辱厅 ”所说的,大多数networking浏览器/客户端不支持这个(对于HTTP)。 另请参阅why-do-browsers-not-use-srv-records 。
这个协议基本上说,SRV并不是必须包含在http协议中,所以每个实现它的浏览器parsingURL的方式都不同于不支持的浏览器。
所以你应该只使用这个作为一些可选的负载平衡,这是不相关的内容方面select服务器。 “可选”,因为如果只有很less的客户端实现这一点,它将不会平衡大部分的负载。
DNS不具备redirect到特定端口的能力,所有DNS关心的是名称的IP地址parsing,反之亦然。
某些服务(如dynamicIP DNS提供程序(如NO-IP))提供了一种服务,可以帮助您执行类似的操作,以避免在家庭DNS服务上阻止IP。
为了在非标准端口上使用任何 (TBT)服务,并且不要在URI中写入端口, 每个人都可以使用RFC 2782中定义的SRVlogging。
_http._tcp.www.example.com. IN SRV 0 5 87 www.example.com.
区域中的所有其他http主机仍将在缺省端口80上提供服务
在同一主机上部署两台Web服务器的一种方法是让两台服务器在两个不同的IPv6地址上监听端口80。 IPv6正式指定您可以分配两个地址到一个接口,并且有足够的IPv6地址,您可以做到这一点,而不用地址不足。
这是未来的certificate,并且您的两个域可以分别具有指向不同IP地址的AAAAlogging,所以这些域最终在不同的Web服务器上。
如果您也有一个IPv4地址,则可以使用IPv4地址上的端口80运行反向代理。 这样,只有IPv4的客户端才能访问您的Web服务器。 如果某些Web服务器与反向代理位于同一主机上,而某些Web服务器位于其他主机上,则反向代理方法甚至可以工作。
在这样的设置example.org
可能有地址192.0.2.1
和2001:db8::1
而example.net
有地址192.0.2.1
和2001:db8::2
。
最简单的方法是使用反向代理并将其设置为您的Web代理。 你可以为它configuration一个nginx
或者apache
。 我过去基本上也有同样的问题,并以简单的方式制作了一个实现这种configuration的工具。 Ergo: https : //github.com/cristianoliveira/ergo
我一直在使用这个,基本上,就像一个魅力:)