<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[钧野的学习笔记]]></title> 
<atom:link href="https://blog.happytiger.online/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[自信人生二百年，会当水击三千里]]></description>
<link>https://blog.happytiger.online/</link>
<language>zh-cn</language>

<item>
    <title>一个域名，两种走法：公网服务器和内网穿透的实战对比</title>
    <link>https://blog.happytiger.online/?post=2</link>
    <description><![CDATA[<p>上周我把自己的博客折腾上了 HTTPS。折腾的过程里，把两条完全不同的路都走了一遍：一条是标准的公网云服务器，另一条是内网穿透。</p>
<p>踩的坑完全不一样，配置思路也完全不同，索性记下来，给同样卡在「域名怎么绑」这个问题上的朋友省点时间。</p>
<h2>先搞清楚：「绑定域名」其实是两件事</h2>
<p>很多人以为在域名后台加条记录就叫绑定，其实那只做了一半。</p>
<p>一次完整的访问要经过四个环节：</p>
<ol>
<li>浏览器输入域名</li>
<li>DNS 解析出公网 IP</li>
<li>请求到达服务器的 80 或 443 端口</li>
<li>Web 服务器认出「这是哪个域名」，转发给对应的后端程序</li>
</ol>
<p><strong>第 1、2 步在域名商那边配，第 3、4 步在你自己机器上配。</strong> 两段都通了，才叫真的绑上了。</p>
<p>第 4 步最容易被人忽略。服务器收到请求时，HTTP 头里带着一行 <code>Host: blog.yourdomain.com</code>，Nginx 就是拿它跟每个 <code>server</code> 块的 <code>server_name</code> 比对，命中哪个就走哪个。没命中任何一块，就落到默认站点——这也就是为什么有时候直接输 IP，会看到一个莫名其妙的默认页。</p>
<p>搞懂了这四步，两种方案的区别就只剩一个问题：<strong>中间那一段路，是谁在替你走。</strong></p>
<h2>路线 A：公网云服务器</h2>
<p>买台阿里云 ECS，配了公网 IPv4，最标准的做法。</p>
<p>链路很短：</p>
<pre><code>浏览器 → DNS → 你的公网 IP:443 → Nginx → 后端 127.0.0.1:8080</code></pre>
<p>配置也就三件事。</p>
<p><strong>第一，加一条 A 记录。</strong> 在域名控制台给 <code>blog.yourdomain.com</code> 加 A 记录，值填服务器公网 IP。</p>
<p><strong>第二，安全组放行。</strong> 阿里云控制台 → 实例 → 安全组 → 入方向，加上 80 和 443。这一步漏了，配置写得再对也没用，浏览器会一直转圈直到超时。</p>
<p><strong>第三，Nginx 里写 server 块：</strong></p>
<pre><code class="language-nginx">server {
    listen 443 ssl;
    server_name blog.yourdomain.com;

    ssl_certificate     /etc/nginx/ssl/blog.crt;
    ssl_certificate_key /etc/nginx/ssl/blog.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

server {
    listen 80;
    server_name blog.yourdomain.com;
    return 301 https://$host$request_uri;
}</code></pre>
<p><code>server_name</code> 那一行，才是「绑定」的本体。</p>
<p>这里有个常被问到的细节：<strong>TLS 握手发生在浏览器发出 <code>Host</code> 头之前</strong>，那时候服务器还看不到 HTTP 头。所以 HTTPS 的分流靠的不是 <code>Host</code>，而是 <strong>SNI</strong>——浏览器在握手第一步就喊一句「我要访问 blog.yourdomain.com」。Nginx 拿 SNI 去匹配 <code>server_name</code> 选证书，所以一台机器上不同域名能各用各的证书。</p>
<p><strong>还有一个绕不过去的门槛：备案。</strong> 大陆服务器 + 自己的域名 + 走 80/443，基本都要 ICP 备案。没得商量，这是政策层面的事，不是技术能绕的。</p>
<p>优点很明确：带宽独享、IP 归你、延迟最低、想跑什么跑什么。<br />
缺点也很明确：要花钱，要备案，服务器得有公网 IP。</p>
<h2>路线 B：内网穿透</h2>
<p>如果服务器在家里，运营商给的是大内网 IP，或者压根不想买公网带宽，那就走这条路。</p>
<p>链路长了一截：</p>
<pre><code>浏览器 → DNS → 穿透节点的 IP:443 → frps 按域名分流 → 加密隧道 → 你的机器:443 → 后端</code></pre>
<p>关键是那个「穿透节点」。它是一台有公网 IP 的机器，你花钱买的其实是<strong>它的一段转发能力</strong>。你的域名解析到的不是自己的服务器，而是这个节点的 IP。</p>
<p>配置同样三件事，但顺序和踩的坑完全不同。</p>
<p><strong>第一，还是 A 记录。</strong> 只不过值要填穿透服务商给你的节点 IP。</p>
<p><strong>第二，在服务商面板里登记域名。</strong> 这一步是路线 B 独有的，也是最容易翻车的地方。我用的是 ipfrp，面板里要新建一条 <code>HTTPS</code> 类型的代理，填本地端口 443，再把域名绑定上去。</p>
<p><strong>第三，改服务器上的 frpc 配置文件。</strong> 大概长这样：</p>
<pre><code class="language-toml">[[proxies]]
name = "261_tqh7agzb"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = ["blog.happytiger.online"]</code></pre>
<p>注意那个 <code>name</code>——它<strong>不是你自己随便起的</strong>，是面板生成的随机串。这是我这周踩得最结实的一个坑：我一开始图省事自己写了 <code>blog_https</code>，frpc 加载正常、没有任何报错，但域名打不开。翻日志才看到：</p>
<pre><code>start error: [20007] blog.happytiger.online 未绑定，请添加到平台</code></pre>
<p>意思是服务端有一张域名白名单，光在你自己的配置文件里写是不够的，必须先在人家面板上登记，而且代理名必须跟面板生成的一字不差。</p>
<p><strong>正确的顺序是：面板加代理 → 抄下代理名 → 改配置文件 → 重启 frpc。</strong> 倒过来做，一定失败。</p>
<p>再说 HTTPS。穿透场景下有个挺关键的点：<strong>证书是装在你自己的机器上的</strong>，服务商只负责转发密文。<code>type = "https"</code> 的代理，frps 只是根据 SNI 把 TLS 数据流原样转给你，解密发生在你的机器上。所以证书、私钥、续期，全都归你管——也多了一份责任。</p>
<p>优点：不用公网 IP、不用买带宽、内网机器也能对外提供服务、成本低得多。<br />
缺点：带宽和稳定性都受服务商制约、多一层故障点、大陆节点用自己域名还是绕不开备案。</p>
<h2>正面对比</h2>
<table>
<thead>
<tr>
<th>对比项</th>
<th>公网云服务器</th>
<th>内网穿透</th>
</tr>
</thead>
<tbody>
<tr>
<td>域名指向</td>
<td>自己的公网 IP</td>
<td>服务商的节点 IP</td>
</tr>
<tr>
<td>带宽</td>
<td>独享，买多少是多少</td>
<td>共享，受套餐限制</td>
</tr>
<tr>
<td>延迟</td>
<td>最低</td>
<td>多一跳，略高</td>
</tr>
<tr>
<td>月成本</td>
<td>几十到几百元</td>
<td>十元级</td>
</tr>
<tr>
<td>备案</td>
<td>必须</td>
<td>大陆节点也必须</td>
</tr>
<tr>
<td>域名白名单</td>
<td>不需要</td>
<td>需要在面板登记</td>
</tr>
<tr>
<td>证书位置</td>
<td>自己服务器</td>
<td>自己服务器</td>
</tr>
<tr>
<td>故障点</td>
<td>少</td>
<td>多一个中转环节</td>
</tr>
<tr>
<td>适合场景</td>
<td>正式对外站点</td>
<td>自用服务、测试、内网设备</td>
</tr>
</tbody>
</table>
<h2>我怎么选的</h2>
<p>说实话，两条路我都在用，分工不同。</p>
<p>博客这种要长期对外、会被搜索引擎收录、偶尔还要分享给别人的，我走了公网服务器那条，省心。</p>
<p>而课表收集、NAS 面板这类「只有我和家长偶尔用一下」的服务，走穿透。花十块钱一个月，换一台不用管公网 IP 的内网机器，我觉得挺值。</p>
<p>所以这道题没有标准答案。<strong>先问自己三个问题</strong>：这台服务是给谁看的？能接受多少延迟？愿不愿意为了它去备案？</p>
<p>想清楚这三个，选哪条路其实自己就浮出来了。</p>
<hr />
<p><em>这篇文章就在自己的博客上写完的，顺便也是这个博客的第一篇。写的时候顺手把 HTTPS 配好了，算是给它办了个体面的开张。</em></p>]]></description>
    <pubDate>Tue, 20 Oct 2026 20:08:51 +0800</pubDate>
    <dc:creator>钧野</dc:creator>
    <guid>https://blog.happytiger.online/?post=2</guid>
</item>
<item>
    <title>演示文章</title>
    <link>https://blog.happytiger.online/?post=1</link>
    <description><![CDATA[<p>这是一篇演示文章</p>]]></description>
    <pubDate>Tue, 20 Oct 2026 12:22:43 +0800</pubDate>
    <dc:creator>钧野</dc:creator>
    <guid>https://blog.happytiger.online/?post=1</guid>
</item>
</channel>
</rss>