使用 HTTP 和 Gemini 或 Gopher 协议为域设置 DNS

使用 HTTP 和 Gemini 或 Gopher 协议为域设置 DNS

我的博客在域名上palashbauri.in,这是一个托管在 Cloudflare Pages 上的静态 hugo 网站。DNS 由 Cloudflare 管理。目前我的域名palashbauri.in有指向该博客的 CNAME 记录。

因此,我的博客可通过 http(s) 在端口 80 和 443 上访问。如果可能,我应该如何配置 DNS 记录,以使 gemini 和 gopher 协议可在同一域上访问,例如

gemini://palashbauri.ingopher://palashbauri.in

gemini://gemini.palashbauri.in我知道,我可以使用子域名(例如或)使其工作gopher://gopher.palashbauri.in,但如果不使用子域名就可以访问它,那会更好吗?

Gemini 协议简介:在端口 1965 上运行的 TCP 服务器协议。

Gopher 协议在端口 70 上运行。

答案1

如果可能的话,我应该如何配置我的 DNS 记录以使 gemini 和 gopher 协议可以在同一个域上访问,例如

这只有当全部协议托管在同一系统上。也就是说,您需要将 HTTP 服务移出 Cloudflare,并开始将其托管在与 Gemini/Gopher 相同的机器上。(也就是说,您既不能使用 Cloudflare Pages也不Cloudflare 代理 CDN。)完成后,您根本不需要对 DNS 进行任何额外的操作。

当您仅对 A/AAAA 记录进行常规查询时,DNS不知道您将使用什么协议。它只知道请求的域名和记录类型,因此您不能如果所有应用程序都请求完全相同的名称,则将一些应用程序重定向到 Cloudflare Pages 服务器,并将其他应用程序重定向到您的 Gopher/Gemini 服务器。

一些协议让客户端首先故意进行特定于协议的 DNS 查询 - 例如,电子邮件服务器将在 A/AAAA 之前查找 MX 记录,而 Minecraft 将_minecraft._tcp.<domain>在域本身上查找 A/AAAA 之前查找 SRV 记录,并且允许邮件服务器或游戏服务器托管在与域中其他所有内容完全不同的机器上。

但对于大多数没有此类规定的协议,区分 Gemini 客户端发出的 DNS 请求和 HTTP 客户端发出的请求的唯一方法是使用不同的子域名。(这就是为什么像ftp和 这样的子域名www一开始如此常用的原因。)


唯一的其他解决方法是让服务器接受所有连接,并且继电器其中一些连接到另一台服务器。例如,您的 Gopher 服务器可以使用常见的“反向代理”接受 HTTP 连接,并将请求转发到 Cloudflare Pages - 尽管这样您就完全失去了在 CF 上托管网站的优势。或者,Cloudflare 可以将端口 70/1965 上的 TCP 连接代理到您的服务器,但我认为这只是他们昂贵的企业计划的一部分。

相关内容