<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Spaceship on 美味芝士</title>
        <link>https://www.whysoso.com/tags/spaceship/</link>
        <description>Recent content in Spaceship on 美味芝士</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 26 Oct 2026 21:42:42 +0800</lastBuildDate><atom:link href="https://www.whysoso.com/tags/spaceship/index.xml" rel="self" type="application/rss+xml" />
        <image>
            <url>https://www.whysoso.com/img/avatar.png</url>
            <title>美味芝士</title>
            <link>https://www.whysoso.com/</link>
        </image><item>
        <title>给 GitHub Pages 绑定自己的子域名：从仓库设置到 DNS 解析、HTTPS 全记录</title>
        <link>https://www.whysoso.com/post/tutorial/github-pages-custom-domain/</link>
        <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://www.whysoso.com/post/tutorial/github-pages-custom-domain/</guid>
        <description>&lt;p&gt;GitHub Pages 默认给 &lt;code&gt;*.github.io&lt;/code&gt; 地址，想换成自己的子域名（如 &lt;code&gt;www.whysoso.com&lt;/code&gt;）只需两步：&lt;strong&gt;GitHub 仓库里声明自定义域名&lt;/strong&gt; + &lt;strong&gt;注册商加 DNS 解析&lt;/strong&gt;。本文用 &lt;code&gt;www.whysoso.com → whyboystudy.github.io&lt;/code&gt; 实操为例，记录完整流程与踩坑。&lt;/p&gt;
&lt;h2 id=&#34;第一步github-仓库里填自定义域名&#34;&gt;第一步：GitHub 仓库里填自定义域名
&lt;/h2&gt;&lt;p&gt;进 Pages 仓库（用户页即 &lt;code&gt;&amp;lt;用户名&amp;gt;.github.io&lt;/code&gt;）→ &lt;strong&gt;Settings → Pages → Custom domain&lt;/strong&gt;，输入子域名（如 &lt;code&gt;www.whysoso.com&lt;/code&gt;），点 Save。&lt;/p&gt;
&lt;p&gt;GitHub 会自动在发布分支根目录生成 &lt;strong&gt;CNAME 文件&lt;/strong&gt;（内容即你的域名），这是它识别自定义域的依据，别手删。&lt;/p&gt;
&lt;p&gt;此时先别勾 &lt;strong&gt;Enforce HTTPS&lt;/strong&gt;——证书未签发前强制会陷入重定向循环。&lt;/p&gt;
&lt;h2 id=&#34;第二步注册商加-dns-记录&#34;&gt;第二步：注册商加 DNS 记录
&lt;/h2&gt;&lt;p&gt;子域名只需加 &lt;strong&gt;1 条 CNAME 记录&lt;/strong&gt;，指向 &lt;code&gt;&amp;lt;用户名&amp;gt;.github.io&lt;/code&gt;（本文即 &lt;code&gt;whyboystudy.github.io&lt;/code&gt;）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;记录要加在真正托管 DNS 的那家：看域名的 NS 指向谁。本文 &lt;code&gt;whysoso.com&lt;/code&gt; 注册在 Spaceship，但 NS 已指向 Cloudflare，所以记录在 Cloudflare 加。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;方案-a域名在-spaceship自托管-dns&#34;&gt;方案 A：域名在 Spaceship（自托管 DNS）
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Domains → 域名 → Manage → Advanced DNS&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;加 1 条 CNAME：Type &lt;code&gt;CNAME&lt;/code&gt;，Host &lt;code&gt;www&lt;/code&gt;，Value &lt;code&gt;whyboystudy.github.io&lt;/code&gt;，TTL &lt;code&gt;Automatic&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;方案-b域名在-cloudflare或-ns-已指向-cloudflare&#34;&gt;方案 B：域名在 Cloudflare（或 NS 已指向 Cloudflare）
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;选域名 → 左侧 &lt;strong&gt;DNS → Records → Add record&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;加 1 条 CNAME：Type &lt;code&gt;CNAME&lt;/code&gt;，Name &lt;code&gt;www&lt;/code&gt;，Target &lt;code&gt;whyboystudy.github.io&lt;/code&gt;，TTL &lt;code&gt;Auto&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proxy status 先设 DNS only（灰云）&lt;/strong&gt;，原因见常见坑。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;照抄填的记录表（Cloudflare 版，本文实际用的）：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;目标&lt;/th&gt;
					&lt;th&gt;Proxy&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CNAME&lt;/td&gt;
					&lt;td&gt;www&lt;/td&gt;
					&lt;td&gt;whyboystudy.github.io&lt;/td&gt;
					&lt;td&gt;DNS only（灰云）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;第三步验证生效--开启-https&#34;&gt;第三步：验证生效 + 开启 HTTPS
&lt;/h2&gt;&lt;p&gt;DNS 全球生效需几分钟到几小时。验证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nslookup -type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;CNAME www.whysoso.com  &lt;span class=&#34;c1&#34;&gt;# 应链到 whyboystudy.github.io&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dig +short www.whysoso.com            &lt;span class=&#34;c1&#34;&gt;# macOS / Linux 也可用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;本文实测 www 的 CNAME 链为 &lt;code&gt;whyboystudy.github.io → 185.199.108~111.153&lt;/code&gt;，即生效。&lt;/p&gt;
&lt;p&gt;回到 GitHub &lt;strong&gt;Settings → Pages&lt;/strong&gt;：等 DNS check 变绿勾 → GitHub 自动签发免费证书 → 证书就绪后勾 &lt;strong&gt;Enforce HTTPS&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;第四步hugo-改-baseurl-并重新部署&#34;&gt;第四步：Hugo 改 baseURL 并重新部署
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;hugo.yaml&lt;/code&gt; / &lt;code&gt;config.toml&lt;/code&gt; 里的 &lt;code&gt;baseURL&lt;/code&gt; 必须同步，否则站内链接、RSS、sitemap 仍是 &lt;code&gt;.github.io&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;baseURL&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.whysoso.com/&amp;#34;&lt;/span&gt;   &lt;span class=&#34;c&#34;&gt;# 本文实际用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;改完重新生成并推送（push 触发 Actions 自动部署）。&lt;/p&gt;
&lt;h2 id=&#34;第五步防止部署清空自定义域名cname&#34;&gt;第五步：防止部署清空自定义域名（CNAME）
&lt;/h2&gt;&lt;p&gt;如果你用 GitHub Actions 部署（如 &lt;code&gt;peaceiris/actions-gh-pages&lt;/code&gt;），会出现「每次 Action 跑完 Custom domain 变成空、跳回 &lt;code&gt;*.github.io&lt;/code&gt;」——这是最高频的坑，本文 &lt;code&gt;www.whysoso.com&lt;/code&gt; 就栽在这。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：在 Settings → Pages 填域名后，GitHub 把域名写进&lt;strong&gt;发布分支根目录的 &lt;code&gt;CNAME&lt;/code&gt; 文件&lt;/strong&gt;来记住它。但这类 Action 是「用 &lt;code&gt;PUBLISH_DIR&lt;/code&gt;（如 &lt;code&gt;./public&lt;/code&gt;）强制覆盖发布分支、清掉其他文件」，而你的 &lt;code&gt;public/&lt;/code&gt; 里&lt;strong&gt;没有 CNAME&lt;/strong&gt; → 每次部署把 GitHub 写好的 CNAME 冲掉 → 域名被清空。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修法&lt;/strong&gt;：在 Hugo 源码的 &lt;strong&gt;&lt;code&gt;static/CNAME&lt;/code&gt;&lt;/strong&gt; 写一行域名（如 &lt;code&gt;www.whysoso.com&lt;/code&gt;，不要多余空格或空行）。Hugo 构建时把 &lt;code&gt;static/&lt;/code&gt; 原样拷到 &lt;code&gt;public/&lt;/code&gt;，于是 &lt;code&gt;public/CNAME&lt;/code&gt; 每次都进发布分支，域名就稳了。&lt;/p&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若工作流 &lt;code&gt;EXTERNAL_REPOSITORY&lt;/code&gt; 指向另一个仓库（本仓库只放源码、部署到 &lt;code&gt;用户名.github.io&lt;/code&gt;），CNAME 落到那个仓库的发布分支——正是 Pages 读取的地方，无需在本仓库根放 CNAME。&lt;/li&gt;
&lt;li&gt;带 CNAME 的部署跑完后，回 Settings → Pages 把自定义域&lt;strong&gt;重填一次&lt;/strong&gt;；之后分支里一直有 CNAME，再也不会被冲掉。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;常见坑&#34;&gt;常见坑
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Cloudflare 代理（橙云）导致证书签发失败&lt;/strong&gt;
加记录时先 &lt;strong&gt;DNS only（灰云）&lt;/strong&gt;，等证书签发、站点正常后再按需开橙云（CDN 加速）。Cloudflare 的 &lt;strong&gt;SSL/TLS 模式设 Full（非 Flexible）&lt;/strong&gt;，否则与 GitHub 的 HTTPS 互重定向成死循环。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;域名未注册就加解析&lt;/strong&gt;
记录只对已注册、NS 已委派的域名生效。先确认 RDAP / whois 域名已存在（本文 &lt;code&gt;whysoso.com&lt;/code&gt; 是当天在 Spaceship 注册、NS 指向 Cloudflare 后才配的）。&lt;/p&gt;
&lt;h2 id=&#34;实战小结&#34;&gt;实战小结
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;whysoso.com&lt;/code&gt; 注册于 Spaceship → NS 指向 Cloudflare → Cloudflare 加 1 条 CNAME（www → &lt;code&gt;whyboystudy.github.io&lt;/code&gt;）→ GitHub Pages 填 &lt;code&gt;www.whysoso.com&lt;/code&gt; → 证书签发后 Enforce HTTPS → Hugo &lt;code&gt;baseURL&lt;/code&gt; 改 &lt;code&gt;https://www.whysoso.com/&lt;/code&gt; 并重部署 → &lt;code&gt;static/CNAME&lt;/code&gt; 锁定域名不被部署清空。核心三句：&lt;strong&gt;GitHub 声明域名、注册商 DNS 加 CNAME 指到 &lt;code&gt;&amp;lt;用户名&amp;gt;.github.io&lt;/code&gt;、证书出来再强制 HTTPS&lt;/strong&gt;。Cloudflare 用户记「先灰云后橙云、SSL 用 Full」即可。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>