首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DNS条目映射到特定端口

问将DNS条目映射到特定端口
EN

Stack Overflow用户
提问于 2018-04-10 06:05:14
回答 2查看 6.7K关注 0票数 3

假设我有一个DNS条目:mysite.sample。我正在开发,并有我的网站在本地运行在http://localhost:8080的副本。我希望这个网站可以使用(假的) DNS:http://mysite.sample,联系到,而不强迫记住这个站点正在运行的端口。我可以设置/etc/hosts和nginx来做程序,但是.有更简单的方法吗?

我是否可以使用/etc/hosts和/或dnsmasq设置一个简单的DNS条目,其中还指定了一个非标准端口(与:80/:443不同)?不需要为nginx提供额外的配置

或者用更简单的方式表述:是否可以为/etc/hosts或dnsmasq中的dns条目提供端口映射?

EN

回答 2

Stack Overflow用户

发布于 2018-04-10 06:18:53

DNS与TCP端口无关。DNS是用来将名字(例如mysite.sample)解析成IP地址--有点像电话簿。

所以这是明确的“不”。然而,还有另一个解决方案,我试着解释一下。

当您在浏览器地址栏中输入http://mysite.sample:8080时,您的客户端(例如浏览器)将首先尝试将mysite.sample (通过OS调用)解析为IP地址。这是DNS启动的地方,因为DNS是您的名称解析器。如果发生这种情况,DNS的工作将完成,浏览器将继续运行。

这就是HTTP中的“魔力”发生的地方。浏览器连接到已解析的IP地址,所需端口(默认情况下为http为80,而https为443 )正在等待连接被接受,然后发送以下报头:

代码语言:javascript
复制
GET <resource> HTTP/1.1
Host: mysite.sample:8080

现在,服务器读取这些头并相应地执行操作。大多数现代web服务器都有所谓的“虚拟主机”(即Apache)或“站点”(即nginx)。您可以为每个域配置多个vhost/站点。然后,web服务器将提供与请求的主机相匹配的站点(浏览器从地址栏撤回并通过Host header传递给服务器)。这是纯HTTP,与TCP无关。

如果您无法更改原始服务的端口(在您的例子中是8080),您可能需要在您的服务之前设置一个新的web服务器。这也被称为反向代理。我建议您阅读NGINX反向代理文档,但是您也可以使用Apache或任何其他现代web服务器。

对于nginx,只需设置一个新站点并将其重定向到您的服务:

代码语言:javascript
复制
location mysite.example {
    proxy_pass http://127.0.0.1:8080;
}
票数 3
EN

Stack Overflow用户

发布于 2018-04-11 06:49:42

在DNS中有一种发现服务使用的端口的机制,它被称为服务记录 (SRV),它具有以下形式

代码语言:javascript
复制
_service._proto.name. TTL class SRV priority weight port target.

但是,要使用此记录,您需要有一个在调用之前引用该记录的应用程序。正如Dominique所说,这不是HTTP的工作方式。

我编写了一个先前的回答,它解释了这方面的一些背景,以及为什么HTTP不在标准中。(本文讨论WS,但底层讨论建议将其直接添加到HTTP协议中)

编辑后添加-

实际上,有一个IETF文件草稿在探索一种正式的方法来实现这一点,但它从未通过草案阶段。

本文档指定了一个名为http+srv的新URI方案,它使用DNS SRV查找来定位HTTP服务器。

有一个特定的所以答案这里,它指向一个有趣的帖子这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49746426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档