Nginx 将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提供额外配置 或者用更简单的方式表述:

假设我有一个DNS条目:
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.