如何使用DNS /主机名或其他方式解析为特定IP:端口


51

这是关于将DNS /主机名解析为IP /端口的规范问题

例子1

我在端口80上运行一个Web服务器,在端口87上运行另一个服务器。我想使用DNS,以便www.example.com转到端口87。如何仅使用DNS来完成此操作?

例子2

我在服务器的非标准端口上运行服务。如何让客户端自动连接到该非标准端口?我可以使用DNS吗?在DNS可以指示IP和端口的情况下,是否有一些特定于应用程序的支持?

例子3

某些应用程序协议是否专门支持主机名识别,并允许根据此信息采取特殊措施?关于服务器故障,是否还有其他一些问题可以解决?

Commandeering:这个问题最初是关于在同一服务器上运行IIS和Apache的问题,但是相同的概念可以应用于从客户端接收连接的任何服务器软件。下面的答案描述了使用DNS和应用程序协议支持为客户端分配端口号的技术问题和解决方案。


关于示例三,读者也可能希望研究有关使任意协议具有主机名意识的规范问题。
MadHatter

Answers:


34

您不能使用DNS指向端口(除非客户端支持SRV记录,大多数情况下不支持)。

具有主机头的网站和协议

您将必须使用一些前端方法来执行此操作。通常,您将根据前端中请求的服务器名称,使用前端Web服务器或专用代理软件将连接从端口80转发到端口!80。一些防火墙也可以基于主机头转发。

SRV记录

某些客户端支持对SRV记录的查找,这些记录指示指定服务的服务器的主机名和端口号(即用户指定“ example.com”,客户端在端口“ 255”上查找SRV记录并获取“ server101.example.com”) “;然后连接到该页面)。一些客户端也在不需要的地方实现此功能(例如,我的最后一部智能手机会在设置新的电子邮件帐户时查找SRV记录)。

不幸的是,对SRV记录的支持很少见。只有少数几个著名的协议强制要求它的支持(Jabber / XMPP,Kerberos,LDAP,SIP),即使强制要求,并不是每个客户端都支持它。


15

当您在浏览器中键入http://www.domain.com时,可以理解HTTP端口在80上。因此,如果您已经拥有服务,则没有直接的方法将www.domain.com指向端口87。在IIS中的那个端口上运行。

话虽如此,有一些“解决方法”。

  • 只需使用http://www.domain.com:87/-这将连接到服务器上的端口87(apache)。
  • 您可以设置重定向,以便http://www.domain.com/apache会将其转发(或代理,如果您愿意的话)到www.domain.com:87。
  • 您可以设置“ VirtualHost”,以使www.domain2.com仍位于与www.domain.com共享的端口80上。如果不修改IIS,则无法进行设置。

Sam是对的,DNS在端口方面是不可知的。端口重定向由运行在该端口上的服务发生。因此,如果您别无选择,只能将其保留在端口80上,则需要对IIS进行某些操作以实现此目的。

我还通过在Apache上使用mod_proxy解决了您的情况,不确定是否可以通过IIS来实现。


好的,那么如何在IIS上设置代理?
Tomasz Smykowski 09年

2
如果是IIS7,则可以使用应用程序请求路由(ARR)。
Scott Forsyth-MVP,

1
斯科特,您是否有很好的ARR文档链接?
雅克

12

恐怕域名只能与IP地址关联,而不能与端口关联。

大多数Web服务器(例如Apache,IIS等)的确允许您使用Web请求包含标识请求本身中域的主机头字段的事实,将两个域托管在同一IP地址上。

如果您说的是您正在使用的Web服务器,那么我相信人们会指出您想要的相关文档来设置服务器


这才是重点。我正在使用两个不同的Web服务器。
奥马尔·阿比德

12

从技术上讲,您可以使用RFC 2782中定义的DNS服务器上的SRV记录 来告诉浏览器哪些服务器在(子)域的哪些端口上处理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.

这对许多协议/服务都适用,特别是在协议规范中已经定义了SRV记录的使用的情况下。

但是,正如此“ 耻辱大厅 ”所指出的那样,大多数Web浏览器/客户端都不支持此功能(对于HTTP)。另请参阅为什么不使用浏览器记录

基本上,要达成的协议是,SRV并非必须包含在http协议中,因此,实现该SRV的每个浏览器对URL的解析都与未实现的浏览器不同。

因此,您仅应将此用作一些可选的负载平衡,而在内容方面与选择哪个服务器无关。“可选”,因为如果只有很少的客户端实现此功能,它将无法平衡大量负载。


6

DNS没有重定向到特定端口的功能,所有DNS只关心名称的IP地址解析,反之亦然。

某些服务(例如动态IP DNS提供程序)(例如NO-IP)提供了一项服务,可以帮助您做一些类似的事情来全面阻止家庭DNS服务上的IP。


一些注册商(GoDaddy)通过停放的服务器提供域转发。您可以试一下,但这有点不合时宜。或者,您可以编写自己的Web浏览器来查找SRV记录,然后尝试说服世界使用它:)
Jason Antman 2009年

6

为了在非标准端口上使用任何(TBT)服务并且不在URI中写入端口,每个人都可以使用RFC 2782中定义的SRV记录。

_http._tcp.www.example.com. IN      SRV 0    5      87   www.example.com.

区域中的所有其他http主机仍将在默认端口80上提供


3
+1指出以下几条陈述是不正确的,就规范而言-DNS绝对可以通过SRV记录指示服务端口。但是它也假定客户知道首先要请求SRV记录。
mcauth 2012年


0

在同一主机上部署两个Web服务器的一种方法是让它们两个都侦听两个不同IPv6地址上的端口80。IPv6正式指定您可以为接口分配两个地址,并且有足够的IPv6地址可以执行此操作而不会用完地址。

这是面向未来的证明,并且您的两个域每个都可以具有指向不同IP地址的AAA​​A记录,因此这些域最终位于不同的Web服务器上。

如果还具有单个IPv4地址,则可以使用IPv4地址上的端口80运行反向代理。这样,仅IPv4的客户端可以访问您的两个Web服务器。如果某些Web服务器与反向代理在同一主机上,而某些Web服务器在其他主机上,则反向代理方法甚至可以工作。

在这样的设置中,example.org可以有地址192.0.2.12001:db8::1example.net有可能有地址192.0.2.12001:db8::2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.