Skip to content

域名部署详细教程(DNS + 反代 + HTTPS + announce) ​

服务已经按 建站手把手教程 在服务器上跑起来、用 IP 能访问之后,这篇教你怎么用自己的域名 + HTTPS 正式对外。每一步都给命令和可直接抄的 Nginx 配置。不懂的词查 术语小词典。

这篇解决什么问题 ​

现在你大概是用 http://服务器IP:3000 访问的。正式开站要换成 https://你的域名.com:用户好记、浏览器不报不安全、tracker 走加密 announce(passkey 不会被明文截获)。核心就三件事:域名解析 → 反代 + 证书 → 把 announce 地址改成域名。


TL;DR ​

  1. 域名商后台加 A 记录指向服务器公网 IP;
  2. 开放 80 / 443 端口(云安全组 + 系统防火墙两层);
  3. 装 Nginx,443 反代到 3000(web)/8080(api)/7070(tracker),用 certbot 申请 Let's Encrypt 证书;
  4. 后台「站点设定 → 基础设定 → Tracker 地址」填 https://你的域名.com(根地址即可,系统自动拼 /announce/<passkey>);
  5. 验证:浏览器开 https://你的域名.com/setup、下载一颗种子确认能连 tracker。

第 1 步:域名解析(DNS) ​

登录你买域名的平台(阿里云/Cloudflare/Namecheap 等),做两件事:

记录类型主机名指向说明
A@(或 www)服务器公网 IPv4主域名指向机器
AAAA(可选)@服务器 IPv6有 IPv6 才加

要不要单独的 tracker.你的域名.com 子域?不用。tracker 和网站用同一个域名即可,靠 Nginx 路径区分(下一步)。省一个子域就少一份证书管理。

怎么算生效: 终端跑 ping 你的域名.com 能解析到你的服务器 IP;或用 dig 你的域名.com +short。DNS 生效有几分钟到几小时的传播时间(看 TTL),改完耐心等。


第 2 步:开放端口(防火墙 / 安全组) ​

两层都要开(云厂商「安全组」+ 服务器自身防火墙如 ufw/firewalld):

端口协议用途是否必须
80TCPHTTP(证书申请验证 + 跳转 HTTPS)必须
443TCPHTTPS(用户访问 + tracker announce)必须
7070TCPtracker HTTP(走 443 反代时不需公网开)走 443 则不必
6969UDPtracker UDP(默认不启用,私有站用 HTTP announce 足够)通常不必

关键点:BT 客户端是通过你的 443 端口(经 Nginx)连 tracker 的,不是直连 7070。所以只要你把 announce 走 HTTPS(推荐),7070/6969 都不需要对公网开放,只让 Nginx 在本地转发即可。更安全、端口更少。


第 3 步:反向代理 + HTTPS(核心) ​

3.1 装 Nginx ​

bash
# Debian/Ubuntu
sudo apt update && sudo apt install -y nginx
# CentOS
sudo dnf install -y nginx && sudo systemctl enable --now nginx

3.2 写入站点配置 ​

新建 /etc/nginx/sites-available/fluxtorrent.conf(或 /etc/nginx/conf.d/fluxtorrent.conf),内容整段复制,把 pt.example.com 换成你的域名:

nginx
# 边缘限流(tracker 防启动风暴;阈值远高于正常 1800s 汇报间隔)
limit_req_zone  $binary_remote_addr zone=ann_perip:10m rate=60r/s;
limit_conn_zone $binary_remote_addr zone=ann_conn:10m;

server {
    listen 80;
    server_name pt.example.com;
    # 证书申请期间允许 ACME 验证;平时这条会把所有流量跳 HTTPS
    location /.well-known/acme-challenge/ { root /var/www/certbot; }
    location / { return 301 https://$host$request_uri; }
}

server {
    listen 443 ssl http2;
    server_name pt.example.com;

    ssl_certificate     /etc/letsencrypt/live/pt.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pt.example.com/privkey.pem;

    client_max_body_size 32m;   # 种子上传(.torrent 文件)

    # tracker announce:放最前,优先匹配 /announce/,转发到本地 7070
    location /announce/ {
        limit_req  zone=ann_perip burst=120 nodelay;
        limit_conn ann_conn 120;
        limit_req_status 429;
        proxy_pass http://127.0.0.1:7070;
        proxy_set_header Host $host;
    }

    # 后台接口
    location /api/ { proxy_pass http://127.0.0.1:8080; }

    # 网站(页面 + 静态资源 + 同源 /api 转发都由 web 容器处理)
    location /_next/ { proxy_pass http://127.0.0.1:3000; }
    location /       { proxy_pass http://127.0.0.1:3000; }
}

启用并校验:

bash
sudo ln -s /etc/nginx/sites-available/fluxtorrent.conf /etc/nginx/sites-enabled/ 2>/dev/null
sudo nginx -t            # 显示 syntax is ok 才算通过
sudo systemctl reload nginx

3.3 申请 HTTPS 证书(Let's Encrypt,免费) ​

bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d pt.example.com

按提示填邮箱、同意条款,证书会自动签发并写入上面配置的 /etc/letsencrypt/live/pt.example.com/ 路径。certbot 还会自动把 80→443 跳转和证书续期都配好。

用 1Panel / 宝塔? 面板里「网站 → 创建网站 → 反向代理」填 http://127.0.0.1:3000,再在网站设置里「申请 Let's Encrypt 证书 + 强制 HTTPS」即可,不用手敲 Nginx(详见 面板部署)。但 /announce/ → 7070 这条 tracker 反代面板不会自动加,仍需在面板的高级配置里补上那段 location /announce/。


第 4 步:把 announce 地址改成域名(关键) ​

Nginx 起好后,去后台改 tracker 地址,让种子里的 announce 变成你的域名:

  1. 浏览器开 https://你的域名.com/admin(或装完向导直接点「去管理后台」);

  2. 站点设定 → 基础设定 → Tracker 地址,填:

    https://pt.example.com

    ⚠️ 填根地址就行,不要手填 /announce。系统会自动在后面拼 /announce/<你的passkey>;就算你手滑写了 https://pt.example.com/announce,代码也会自动剥掉多余的 /announce(这个坑历史上出过 P0 双路径 bug,现已修复并兜底)。

  3. (推荐)HTTPS announce:同一页还有「HTTPS announce 地址」,也填 https://pt.example.com。填了之后,发出的种子会走 BEP12 双 tier——https 首选 + http 回退,passkey 加密传输,老客户端连不上 https 也能自动降级。

  4. 改完后,已经发出去的旧种子要重新下载才带新地址(announce 是烧进 .torrent 文件里的,不会自动变)。

怎么验证 announce 正确:

  • 发一颗测试种子(或后台找一颗),用文本编辑器打开下载的 .torrent,搜 announce,应看到 https://pt.example.com/announce/xxxxxxxx;
  • 或更直接:下载种子后用客户端做种,看能否连上 tracker(做种一小时魔力正常入账,见 开站第一周)。

第 5 步:CORS 等收尾 ​

  • 编辑服务器上的 docker/.env,确保有:CORS_ORIGINS=https://pt.example.com(多个域名逗号分隔)。改完 docker compose up -d 重启生效。
  • WebAuthn(两步验证)的域名会自动取 announce 地址的 host,不用单独设;
  • 如果之前向导里 announce 填的是 IP,现在改成域名后,记得回向导结束页或后台确认「开站检查清单」里 announce 不再是本地回环。

第 6 步:验证全链路 ​

bash
curl https://pt.example.com/api/v1/health    # 应返回 {"status":"up"}

浏览器访问 https://pt.example.com:

  • 地址栏显示小锁(HTTPS 生效);
  • 页面正常、能登录;
  • 下载一颗种子,客户端能连上 tracker(做种统计走动)。

到这,你的站就是正式的公网 HTTPS 站了。


常见问题 ​

现象原因怎么办
浏览器打不开 443证书路径错 / 防火墙 443 没开nginx -t 看报错;确认安全组+系统防火墙都开了 443
页面能开但种子连不上 trackerNginx 没代理 /announce/ 到 7070检查 3.2 的 location /announce/ 段,reload nginx
改了 announce 还是 127.0.0.1后台值没改 / 旧种子缓存确认后台是域名;已发种子重新下载
announce 报 404/421announce_url 拼错或带了多余端口填根地址 https://域名,不要带 :7070、不要带 /announce
要不要开 6969/UDP默认不需要私有站走 HTTP(S) announce 即可(行业惯例);除非你显式配了 TRACKER_UDP_URL
certbot 报错「无法验证域名」80 端口没开 / DNS 未生效确认 80 开着、域名已解析到本机 IP,等 DNS 传播

词看不懂?→ 术语小词典