Dokku DNS 配置指南:使用 A 记录与通配符域名将应用路由到你的 PaaS 服务器

发布时间:2026/9/10 15:23:31

Dokku DNS 配置指南:使用 A 记录与通配符域名将应用路由到你的 PaaS 服务器 Dokku DNS 配置指南使用 A 记录与通配符域名将应用路由到你的 PaaS 服务器【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku导读DNS域名系统是 Dokku 实现一服务器多应用路由的核心基础设施Dokku 依赖 DNS 把形如node-js-app.example.tld的域名解析到服务器 IP再结合内置的 nginx 等代理vhost机制将不同子域名的流量分发到对应应用。本篇指南以 Dokku 仓库中的 docs/networking/dns.md 为主体讲解子域名app.myserver.example.tld与根域app.example.tld两种接入方案并配合 BIND 格式的 zone 文件示例与host/dig/nslookup验证命令帮助你在完成 安装文档 之前先打好域名解析的地基。读完本文你将能独立完成 Dokku 服务器的域名接入配置并理解 vhost 域名在 Dokku 内部是如何被存储与生成路由 URL 的。DNS 在 Dokku 路由中的角色Dokku 是一个运行在单台服务器上的开源 PaaSPlatform as a Service应用通过git push推送后即可自动构建并运行。当一台 Dokku 服务器上同时运行多个应用时Dokku 使用**域名vhost**来区分它们如果你持有域名example.tld并部署了node-js-app1和node-js-app2两个应用Dokku 会分别让它们通过node-js-app1.example.tld和node-js-app2.example.tld对外提供服务。因此DNS 配置的正确与否直接决定了应用能否被外部访问。安装文档对此有明确说明官方建议为服务器至少绑定一个域名。这不是必须的但使用域名会让应用访问更加容易见 docs/getting-started/installation/index.md。绑定的方式有两种通配符域名*.domain.tld的 A 记录应用可通过$APP.domain.tld访问即每个应用自动获得形如应用名.域名的子域名。单一域名domain.tld的 A 或 CNAME 记录应用将通过domain.tld:$RANDOM_PORT域名加随机端口的形式访问。DNS 服务器的多样性为何以 BIND 格式为示例DNS 生态中存在大量实现野生环境里常见的 DNS 服务器包括 BIND、dnsmasq 和 PowerDNSpdns等Windows 自带的 DNS 服务器之外还有 Unbound、Posadis 等选择此外还有数以万计的托管 DNS 服务商Managed DNS Providers各自提供不同的配置界面。维基百科上维护着 DNS 服务器软件对比和托管 DNS 提供商清单可以按需查阅。正因为可选项如此之多本文档聚焦于 DNS 本身的通用概念并统一采用BIND 格式编写示例以便读者将这些概念适配到自己使用的 DNS 服务器软件或托管 DNS 服务商。前置假设在开始之前本文档假定你已经具备以下条件对 DNS 有基本的了解——知道 DNS 的作用是把名称如example.tld转换为地址如127.0.0.1即可。若完全陌生建议先阅读一篇面向开发者的 DNS 入门文章。已注册一个域名并将其指向你偏好的托管 DNS 服务商或运行着自建的 BIND DNS 服务器。已拥有一台互联网上的服务器正打算按照 README 中的指引安装 Dokku——但先不要执行安装因为 DNS 应该先配置好。谨记DNS 依赖缓存DNS 高度依赖缓存。你对 DNS 所做的修改可能需要几秒到几天的时间才能在全球传播生效。如果曾经访问过example.tld之后又修改了它的 IP 记录你的电脑可能在一段时间内仍使用旧的解析结果。因此在配置过程中验证结果看起来不对时先考虑缓存因素。开始前的准备获取服务器 IP为便于说明全文示例统一使用域名example.tld和 IP 地址127.0.0.1实际使用时请替换为你的真实域名与服务器公网 IP。首先登录你的服务器运行ifconfig或ip addr命令查看服务器的 IP 地址ip addr # 或 ifconfig记下这个 IP接下来所有 DNS 记录都要指向它。做出决策子域名还是根域名拿到 IP 之后你需要对域名策略做一个决定希望example.tld下所有名称都指向 Dokku 服务器还是只用一个子域来承载 Dokku换句话说你的应用最终通过node-js-app.example.tld访问还是通过node-js-app.myserver.example.tld访问子域名方案的优点是干净隔离不会影响example.tld根域上可能存在的其他服务根域名方案则能让应用拥有最短、最直观的访问地址。方案一使用子域名node-js-app.myserver.example.tld子域名方案最简单配置步骤分为三步。1. 创建子域名的 A 记录在配置服务器时你多半已经给它起了一个名字例如myserver.example.tld。进入你的托管 DNS 服务商控制台创建一个名为myserver的A 记录值填入刚才从服务器上查到的 IP 地址。2. 创建通配符 A 记录仅有一个 A 记录还不够Dokku 会为每个应用生成独立的子域名node-js-app.myserver.example.tld、python-app.myserver.example.tld等。为所有应用自动生效你还需要一条通配符记录创建一个名为*.myserver的 A 记录值同样填入服务器 IP。通配符记录会匹配myserver.example.tld下的任意三级子域名。如果你的托管 DNS 服务商不支持通配符记录则需要为每个应用手动添加一条 A 记录应用名对应主机名这会增加后续部署新应用的维护成本。3. BIND zone 文件示例如果你使用 BIND对应的 zone 文件大致如下$ORIGIN example.tld $TTL 5m myserver IN A 127.0.0.1 *.myserver IN A 127.0.0.1其中$ORIGIN example.tld声明该 zone 的根域名$TTL 5m将记录的默认 TTL生存时间设为 5 分钟控制解析结果被缓存的时间长度两条 A 记录分别将myserver.example.tld及其下的任意子域指向127.0.0.1示例 IP请替换为真实地址。4. 验证 DNS 解析在 Linux 上可以通过以下任一命令验证配置是否生效host myserver.example.tld dig -t A myserver.example.tld nslookup myserver.example.tld再次提醒返回的结果可能是被缓存的若与预期不符请耐心等待或使用不同的公共 DNS 递归服务器复查。如果一切正常你还应该能查询myserver.example.tld下的任意其他名称并得到同样的服务器 IPhost test.myserver.example.tld host xyzzy.myserver.example.tld5. 验证 SSH 访问DNS 生效后你应该能够直接通过主机名访问服务器ssh rootmyserver.example.tld如果 SSH 连接成功说明 DNS 已为 Dokku 正确配置。之后即可继续执行 安装文档 中的安装步骤。方案二使用根域名node-js-app.example.tld根域名方案与子域名方案几乎相同区别在于主机名位于example.tld之下仍然需要一条A 记录如example.tld本身或按需添加通配符*应用访问地址不再是app.myserver.example.tld而是app.example.tld。原文档指出这一节仍在完善中。结合仓库中的 docs/configuration/domains.md根域名方案的关键在于后续的全局域名配置安装完成后通过domains:set-global将根域名设置为所有应用的默认 TLD。Dokku 会按scheme://subdomain.domain.tld的结构为应用生成主机名其中subdomain来自推送的应用名domain.tld则来自全局配置。安装后配置全局域名安装并配置好 SSH 密钥后用dokku domains:set-global设置你的全局域名# 使用你拥有的任意域名该域名应有一条 A 记录或 CNAME 指向服务器 IP dokku domains:set-global dokku.me # 也可以直接使用服务器 IP dokku domains:set-global 10.0.0.2 # 还可以借助 sslip.io 获得子域名支持将 .sslip.io 追加到 IP 后面 dokku domains:set-global 10.0.0.2.sslip.io这来自 docs/getting-started/installation/index.mdsslip.io这类通配 DNS 服务可以把10.0.0.2.sslip.io解析为10.0.0.2从而在没有自有域名时也获得子域名能力与真实域名效果一致。设置全局域名后部署应用即可自动获得app.你的域名的访问地址。域名管理的完整命令如domains:add、domains:remove、domains:report等可参阅 docs/configuration/domains.md。源码级原理Dokku 如何利用 DNS 区分应用理解了操作步骤之后从源码层面看看 Dokku 是如何把域名体系落地的能帮助你更好地排查问题。vhost 的存储位置Dokku 的 domains 插件把域名vhost以纯文本文件形式存储全局 vhost$DOKKU_ROOT/VHOST默认即/home/dokku/VHOST由domains:set-global写入见 plugins/domains/functions 中的domains_set_global应用级 vhost$DOKKU_ROOT/$APP/VHOST如/home/dokku/node-js-app/VHOST由domains:add等命令维护见 plugins/domains/functions 中的get_app_domains。应用主机名的生成逻辑当应用没有配置自己的 vhost 时Dokku 会基于全局 vhost 推导主机名核心逻辑在get_default_vhostsplugins/domains/functions若全局 vhost 是 IP 地址IPv4/IPv6则直接跳过、不生成域名否则把应用名与 vhost 拼接应用名不含点号时得到应用名.全局域名如node-js-app.example.tld应用名本身就是 FQDN含点号如dokku.org时直接以应用名作为主机名忽略全局 vhost——这与 docs/configuration/domains.md 的描述一致拼接前还会调用nginx-hostname插件触发器允许插件覆盖默认主机名算法。也就是说只要你的通配符 DNS 能把*.example.tld解析到服务器 IPDokku 就能把每个应用自动映射到对应子域名这正是方案一中通配符 A 记录起作用的原理。路由 URL 的生成部署完成后domains-urls等命令会生成应用的访问 URL逻辑见 plugins/domains/internal-functions 的fn-domains-generate-url监听端口为 80 时输出http://域名443 且存在证书时输出https://域名其他情况输出scheme://域名:端口。vhost 开关NO_VHOST每个应用都可以通过NO_VHOST环境变量控制是否启用 vhostis_app_vhost_enabled读取该变量值为1时 vhost 功能关闭见 plugins/domains/functions。对应地dokku domains:disable app与dokku domains:enable app会设置/清除该变量。关闭 vhost 后nginx 不再为应用生成虚拟主机但应用仍会绑定在某个随机高位端口上供内部访问——这类内部服务不需要 DNS 记录。代理层对未知域名的兜底即便 DNS 配置无误也可能有流量访问到未匹配任何应用的域名。对于默认的 nginx 代理Dokku 在安装时会配置一个 catch-all 默认站点/etc/nginx/conf.d/00-default-vhost.conf对没有匹配任何应用的 HTTP 请求返回444直接关闭连接HTTPS 则使用ssl_reject_handshake拒绝握手。详细行为参见 docs/networking/proxies/nginx.md。常见问题与排查提示解析迟迟不生效优先怀疑 DNS 缓存。检查dig结果中的 TTL并用dig 8.8.8.8 你的域名之类的命令绕过本地缓存直接查询权威服务器。通配符记录被拒绝部分托管 DNS 服务商对通配符有特殊限制可改用为每个应用逐一添加 A 记录的方式或联系服务商确认支持情况。访问返回 444 / 连接被重置说明请求到达了 nginx 但未匹配到任何应用 vhost检查dokku domains:report app确认应用的 vhost 是否已正确生成且 DNS 记录指向的确实是 Dokku 服务器 IP。应用显示为域名:随机端口说明你的域名策略是单一域名非通配符。若希望按子域名访问需要配置通配符 A 记录并通过dokku domains:set-global设置全局域名详见 docs/configuration/domains.md。小结DNS 是 Dokku 多应用路由体系的地基一条指向服务器 IP 的 A 记录让 Dokku 主机本身可达一条通配符 A 记录则让每个新部署的应用自动获得独立子域名。本文以 BIND 格式给出了可直接套用的 zone 文件示例并提供了host、dig、nslookup等验证手段同时从 plugins/domains/functions 的源码出发解释了 vhost 的存储位置、主机名生成逻辑与 URL 拼接规则。在完成 安装文档 后记得用dokku domains:set-global写入全局域名你的 Dokku 服务器即可按子域名对外提供应用服务了。【免费下载链接】dokkuA docker-powered PaaS that helps you build and manage the lifecycle of applications项目地址: https://gitcode.com/GitHub_Trending/do/dokku创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 18:19:00

丝杆升降机晃动与弯曲问题的诊断与解决方案

1. 丝杆升降机晃动与弯曲问题概述丝杆升降机作为工业领域常见的线性传动设备,其稳定性直接影响生产安全和效率。在实际使用中,晃动和弯曲是最常见的两类故障现象。根据我十多年的设备维护经验,这两种问题往往不是独立存在的——晃动会加速结构…

2026/9/10 18:19:00

AXI DMA在Zynq7000上的Linux驱动调试:从设备树到DMA engine

简介:面向Zynq-7000嵌入式开发者的Xilinx AXI DMA驱动资源,聚焦AXI DMA在PS/PL协同场景下的字符设备驱动实现与测试验证,适合有Linux驱动基础、希望深入DMA高性能传输的工程师。压缩包共25个文件,以C源码、头文件和Kbuild/Makefil…

2026/9/10 18:19:00

基于SpringBoot的校园疫情防控信息管理系统设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 18:18:59

GNSS位移监测站技术解析与毫米级精度实现

1. GNSS位移监测站技术解析在工程安全监测领域,毫米级位移监测一直是技术难点。传统测量方式如全站仪需要人工操作,而GNSS(全球导航卫星系统)技术的成熟让自动化、全天候监测成为可能。我参与过多个桥梁和边坡监测项目&#xff0c…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码