是否可以从域名指向特定端口?
Is it possible to point a specific port from a domain name?
基本上我想要的是这个:
first.name.com:25565 -> 127.0.0.1:25562
second.name.com:25565 -> 127.0.0.1:25565
这是我托管的某些 Minecraft 服务器的。
您正在寻找的是基于名称的虚拟主机。在第 4 层传输,您只能通过 IP 或端口号重定向到不同的服务,但是,包括 HTTP(S) 在内的许多协议传输请求中使用的域名,这允许反向代理服务,例如 Apache 或 Nginx重定向到同一甚至不同主机上的实际服务。 Squid 通常用作客户端的转发代理,这在这种情况下没有帮助。您想要的是服务器端的反向 HTTP(S) 代理。我最熟悉 Apache,所以我会在这里介绍它,但 Nginx 和其他人也可以这样做。您将需要 Apache 基于名称的虚拟主机来为每个主机名创建不同的服务,然后将其反向代理到其背后的真实服务。请注意,您不能在 1234 上同时拥有 Apache 运行 和
Listen 10.1.1.1:1234
NameVirtualHost 10.1.1.1:1234
<VirtualHost 10.1.1.1:1234>
ServerName first.name.com
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:4321/"
ProxyPassReverse "/" "http://127.0.0.1:4321/"
</VirtualHost>
<VirtualHost 10.1.1.1:1234>
ServerName second.name.com:1234
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:1234/"
ProxyPassReverse "/" "http://127.0.0.1:1234/"
</VirtualHost>
您还需要确保为 Apache 启用了 mod_proxy 和 mod_proxy_http 模块。在 Debian/Ubuntu 上,可以这样做:
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
最后要注意的是,您要求将来自代理的相同端口 1234 重定向到 127.0.0.1 上的本地主机。通常,我建议为实际服务使用不同的端口,但如果像我在上面的示例中使用 10.1.1.1 那样将 Apache 显式绑定到外部 IP,然后仅将内部服务绑定到 127.0,则可以共享端口.0.1。如果您使用它写为 0.0.0.0 或 * 的普通通配符绑定,那么这两个服务将发生冲突。
好的,这就是我最后做的事情:
mc.name.com 使用 CNAME 记录指向服务器的主机名
我添加的下一条记录是一条 SRV 记录,使 25565 指向 25562(或我需要的任何端口)
_minecraft._tcp.mc.muchieman.com
SRV
900
0 5 25562 mc.muchieman.com.
900 是 TLS,0 是优先级,5 是权重,25562 是指向的端口
基本上我想要的是这个:
first.name.com:25565 -> 127.0.0.1:25562
second.name.com:25565 -> 127.0.0.1:25565
这是我托管的某些 Minecraft 服务器的。
您正在寻找的是基于名称的虚拟主机。在第 4 层传输,您只能通过 IP 或端口号重定向到不同的服务,但是,包括 HTTP(S) 在内的许多协议传输请求中使用的域名,这允许反向代理服务,例如 Apache 或 Nginx重定向到同一甚至不同主机上的实际服务。 Squid 通常用作客户端的转发代理,这在这种情况下没有帮助。您想要的是服务器端的反向 HTTP(S) 代理。我最熟悉 Apache,所以我会在这里介绍它,但 Nginx 和其他人也可以这样做。您将需要 Apache 基于名称的虚拟主机来为每个主机名创建不同的服务,然后将其反向代理到其背后的真实服务。请注意,您不能在 1234 上同时拥有 Apache 运行 和
Listen 10.1.1.1:1234
NameVirtualHost 10.1.1.1:1234
<VirtualHost 10.1.1.1:1234>
ServerName first.name.com
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:4321/"
ProxyPassReverse "/" "http://127.0.0.1:4321/"
</VirtualHost>
<VirtualHost 10.1.1.1:1234>
ServerName second.name.com:1234
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:1234/"
ProxyPassReverse "/" "http://127.0.0.1:1234/"
</VirtualHost>
您还需要确保为 Apache 启用了 mod_proxy 和 mod_proxy_http 模块。在 Debian/Ubuntu 上,可以这样做:
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
最后要注意的是,您要求将来自代理的相同端口 1234 重定向到 127.0.0.1 上的本地主机。通常,我建议为实际服务使用不同的端口,但如果像我在上面的示例中使用 10.1.1.1 那样将 Apache 显式绑定到外部 IP,然后仅将内部服务绑定到 127.0,则可以共享端口.0.1。如果您使用它写为 0.0.0.0 或 * 的普通通配符绑定,那么这两个服务将发生冲突。
好的,这就是我最后做的事情:
mc.name.com 使用 CNAME 记录指向服务器的主机名
我添加的下一条记录是一条 SRV 记录,使 25565 指向 25562(或我需要的任何端口)
_minecraft._tcp.mc.muchieman.com
SRV
900
0 5 25562 mc.muchieman.com.
900 是 TLS,0 是优先级,5 是权重,25562 是指向的端口