Nginx 将DNS条目映射到特定端口
假设我有一个DNS条目:Nginx 将DNS条目映射到特定端口,nginx,dns,dnsmasq,Nginx,Dns,Dnsmasq,假设我有一个DNS条目:mysite.sample。我正在开发,并在http://localhost:8080。我希望可以使用(假)DNS访问此网站:http://mysite.sample,无需强制记住此站点运行的端口。我可以设置/etc/hosts和nginx来进行代理,但是。。。有没有更简单的方法 我是否可以使用/etc/hosts和/或dnsmasq设置一个简单的DNS条目,其中还指定了一个非标准端口(与:80/:443不同的端口)?无需为nginx提供额外配置 或者用更简单的方式表述:
mysite.sample
。我正在开发,并在http://localhost:8080
。我希望可以使用(假)DNS访问此网站:http://mysite.sample
,无需强制记住此站点运行的端口。我可以设置/etc/hosts
和nginx
来进行代理,但是。。。有没有更简单的方法
我是否可以使用/etc/hosts
和/或dnsmasq
设置一个简单的DNS条目,其中还指定了一个非标准端口(与:80
/:443
不同的端口)?无需为nginx
提供额外配置
或者用更简单的方式表述:是否可以为
/etc/hosts
或dnsmasq
中的dns条目提供端口映射?dns与TCP端口无关。DNS用于将名称(例如mysite.sample)解析为IP地址,有点像电话簿
所以这是一个明确的“不”。然而,还有另一个解决方案,我试着解释一下
当您输入http://mysite.sample:8080
在浏览器URL栏中,您的客户端(例如浏览器)将首先尝试将mysite.sample
(通过操作系统调用)解析为IP地址。这就是DNS的作用所在,因为DNS是您的名称解析程序。如果发生这种情况,DNS的工作将完成,浏览器将继续
这就是HTTP中的“魔力”所在。浏览器正在连接到解析的IP地址和所需的端口(默认情况下,http为80,https为443),正在等待连接被接受,然后发送以下标头:
GET <resource> HTTP/1.1
Host: mysite.sample:8080
DNS中有一种机制用于发现服务使用的端口,称为(SRV),其形式为
_service._proto.name. TTL class SRV priority weight port target.
但是,要使用此记录,您需要有一个在调用之前引用该记录的应用程序。正如Dominique所说,这不是HTTP的工作方式
我已经写了一篇文章,解释了这方面的一些背景,以及为什么HTTP不在标准中。(本文讨论了WS,但底层讨论建议将其直接添加到HTTP协议中)
编辑以添加-
事实上,有一个官方的方法可以做到这一点,但它从来没有通过草案阶段
本文档指定了一个名为http+srv的新URI方案,该方案使用DNS srv查找来定位http服务器
有一个特定的SO答案指向一个有趣的帖子当然,这就是我目前正在做的,但这意味着设置DNS条目和配置nginx,这在我做很多站点(不同的项目、用户设备等)时非常麻烦。我知道DNS是如何工作的,以及为什么端口与DNS无关。我希望有一种方法可以向DNS解析添加额外的信息,以指定为请求的域查找特定服务(http)的端口。或者,换一种方式,一种仅用于DNS的覆盖默认http端口的方法(或者,更一般地说,覆盖任何服务端口)啊,对不起,那么我误解了你。如果能在HTTP协议中有这样一个插件就好了。:)
_service._proto.name. TTL class SRV priority weight port target.