首页归档标签关于
← 返回首页

用 Nginx 反代家里那台吃灰的笔记本

#运维#折腾#Nginx

家里那台笔记本买了九年,电池鼓包,屏幕有一道亮线,但 CPU 还能跑。扔了可惜,于是装了 Debian 12,拔掉屏幕当主机用。

它现在在做什么

  • 内网 SMB 文件共享(挂了两块移动硬盘)
  • qBittorrent 下载机,白天在公司也能加任务
  • 一个只给自己用的 Gitea,存私有仓库
  • 定时备份:每天凌晨把重要目录 rsync 到 NAS

功耗实测待机 9W,满载 28W,一个月电费不到六块钱。

外网访问的三层结构

直接暴露家里 IP 是不理智的。我的做法是:

  1. 家里路由器拨号拿到动态公网 IP,用 DDNS 绑定域名
  2. 只开放一个高位端口,其余全部关闭
  3. 云服务器做反代,把 home.example.com 转发到家里
server {
    listen 443 ssl http2;
    server_name home.example.com;

    location / {
        proxy_pass http://home-ddns:8443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 300s;
        client_max_body_size 0;
    }
}

client_max_body_size 0 是必须的,不然上传大文件会 413。proxy_read_timeout 也得调大,否则下载慢一点就被切断。

踩过的坑

一、动态 IP 变了但没生效

DDNS 客户端默认 5 分钟同步一次,而运营商有时候半夜重播。解决办法是在路由器上写脚本,检测到 IP 变化立刻重新拨 DDNS 接口,同时 Nginx 那边把 upstream 换成域名而不是 IP,让它每次重新解析。

二、上传速度被限制

一开始只有 300 KB/s,查了半天发现是运营商上行限速。家宽 1000M 下行通常只配 30–50M 上行,这是硬约束,没法绕。

三、HTTPS 证书续期失败

Let's Encrypt 需要 80 端口验证,但我把 80 全关了。改成 DNS-01 验证之后就好了:

certbot certonly --manual --preferred-challenges dns \
  -d '*.example.com' -d example.com

现在证书自动续期靠 cron + 阿里云 DNS 插件,两年没管过。

值不值得

从成本看,一台云服务器一年几百块,性能比这台笔记本好得多。但自己机器的好处是完全可控:想装什么装什么,硬盘想加就加,数据在自己手里。

自建的乐趣不在于省钱,而在于每一个环节你都知道它是怎么跑起来的。

如果你也有一台吃灰的设备,别急着卖二手,插上网线试试。