想在 VPS 上挂个下载任务,但家里电脑不能 24 小时开机;或者白天在公司看到个磁力链接,想让它先下着,晚上回家直接看。这种"人在外面,机器替你下"的需求,就是离线下载服务器要解决的问题。
VPS 上做离线下载,主流就三个选择:qBittorrent(BT 为主,图形界面)、Transmission(轻量,BT 为主)、Aria2(多协议通吃,纯后端 + 网页前端)。这篇讲 Aria2 —— 它的特别之处是不只会下 BT 和磁力,HTTP、HTTPS、FTP、Metalink 都能下,配合 AriaNg 网页端和 RPC 接口,能把"下载"变成一件可以在任何地方遥控的事。
如果你主要就是玩 PT 站点,qBittorrent 那篇更合适;如果什么都下、还想下到挂载的网盘里,Aria2 才顺手。
| Aria2 | qBittorrent | Transmission | |
|---|---|---|---|
| 协议 | HTTP/HTTPS/FTP/SFTP/BT/磁力/Metalink | BT/磁力 | BT/磁力 |
| 界面 | 无(配 AriaNg 等前端) | 自带 WebUI | 自带 WebUI |
| 资源占用 | 最低 | 中等 | 低 |
| RPC/API | JSON-RPC,接口最全 | 有 WebAPI | 有 RPC |
| 下直链 | ✅ 强项 | ❌ 不支持 | ❌ 不支持 |
| PT 站点 | 能用但不如 qB 顺手 | ✅ 最成熟 | ✅ |
| 适合谁 | 什么都下、要自动化 | PT/种子党 | 极简、老机器 |
一句话选择:只要下 BT/磁力,装 qBittorrent;又要下直链、又想让浏览器/脚本调它下载,选 Aria2。很多人干脆两个都装,各管一摊。
Ubuntu/Debian 直接装:
sudo apt update
sudo apt install -y aria2
aria2c --version
版本号很重要 —— Aria2 要 1.36 以上对 BT 的支持才比较完整。Ubuntu 24.04 源里的版本够用,太老的发行版(比如 CentOS 7 的 1.33)建议换 Docker 装或者自己编译。
推荐路径是 Docker —— 省得自己搞 systemd 和依赖,而且社区有现成镜像:
# docker-compose.yml
services:
aria2:
image: p3terx/aria2-pro
container_name: aria2
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- UMASK_SET=022
- RPC_SECRET=换成你自己的长随机串
- RPC_PORT=6800
- DISK_CACHE=64M
- SPECIAL_MODE=move
volumes:
- ./aria2-config:/config
- /mnt/downloads:/downloads
ports:
- "6800:6800"
- "6881:6881"
- "6881:6881/udp"
RPC_SECRET 千万别留默认值,这是唯一挡住别人用你服务器下载的凭证。后面所有 AriaNg、脚本、API 调用都要带它。
docker compose up -d
docker compose logs -f aria2 # 看有没有报错
用 apt 装的,配置文件在 /etc/aria2/aria2.conf(没有就自己建),核心项:
# 下载目录
dir=/mnt/downloads
# RPC 配置 —— 让 AriaNg 和脚本能连进来
enable-rpc=true
rpc-listen-all=true
rpc-allow-origin-all=true
rpc-listen-port=6800
rpc-secret=换成你自己的长随机串
# 会话文件:重启后保住未完成的下载
save-session=/etc/aria2/aria2.session
input-file=/etc/aria2/aria2.session
save-session-interval=60
# 并发与分片(决定了下载速度)
continue=true
max-concurrent-downloads=5
max-connection-per-server=16
split=16
min-split-size=10M
# 磁盘
file-allocation=falloc
disk-cache=64M
# BT 相关
follow-torrent=true
enable-dht=true
bt-enable-lpd=true
bt-max-peers=128
seed-time=0
bt-tracker=(见下文,别留空)
# 日志
log=/var/log/aria2/aria2.log
log-level=warn
几个关键项解释(这些是最容易配错的):
split + max-connection-per-server:单文件切几片下、每个服务器几条连接。这是下载速度最直接的两个参数。split=16 + max-connection-per-server=16 基本能吃满带宽,但遇到限速的站点反而可能被掐,可以降到 5。
min-split-size=10M:小于这个大小的文件不切分。设太小(比如 1M)会疯狂建连接,很多站点直接 403。
rpc-allow-origin-all=true:不加这个,AriaNg 网页端会报跨域错误连不上。只在 RPC 不直接暴露公网时才可以开(下面安全部分讲)。
seed-time=0:下完就停止做种。VPS 上流量宝贵,不玩 PT 的话建议设 0 或者设个 60(分钟)。玩 PT 站点必须做种,那就别设 0。
file-allocation:falloc 是预分配磁盘空间,速度快、能提前发现空间不足;none 不预分配,适合文件系统不支持的情况;老文件系统上 falloc 可能极慢,那时换 trunc。
continue=true:断点续传。必须开,不然重启就重下。
BT 下载速度慢,八成是 tracker 太少。Aria2 可以配置一个 tracker 列表,并且用脚本定期从网上拉最新的:
# 下载最新的 tracker 列表并替换进配置
curl -s https://trackerslist.com/best_aria2.txt
把它写进 bt-tracker= 后面(逗号分隔)。手动更新很累,配个定时任务自动拉:
# /etc/cron.daily/aria2-tracker
#!/bin/bash
CONF=/etc/aria2/aria2.conf
NEW=$(curl -s https://trackerslist.com/best_aria2.txt)
sed -i "s|^bt-tracker=.*|bt-tracker=$NEW|" $CONF
systemctl restart aria2
apt 装的 Aria2 不会自动帮你建服务,手动写一个:
# /etc/systemd/system/aria2.service
[Unit]
Description=Aria2 Download Service
After=network-online.target
Wants=network-online.target
[Service]
User=aria2
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
# 建个专用用户和目录,别用 root 跑下载器
sudo useradd -r -s /usr/sbin/nologin aria2
sudo mkdir -p /etc/aria2 /var/log/aria2 /mnt/downloads
sudo touch /etc/aria2/aria2.session
sudo chown -R aria2:aria2 /etc/aria2 /var/log/aria2 /mnt/downloads
sudo systemctl daemon-reload
sudo systemctl enable --now aria2
sudo systemctl status aria2
别用 root 跑下载器 —— 一旦有漏洞,root 权限跑的东西能直接毁掉整台机器。
Aria2 自己没有界面,AriaNg 是最流行的网页前端。Docker 一条命令:
ariang:
image: p3terx/ariang
container_name: ariang
restart: unless-stopped
ports:
- "6880:6880"
打开 http://你的IP:6880,在设置里填:
- RPC 地址:
http://你的IP:6800/jsonrpc - RPC 密钥:刚才设的
RPC_SECRET
保存后能连上,界面就会显示下载列表。
6800(RPC)和 6880(AriaNg)都不该用 IP 明文暴露在公网上 —— RPC 密钥是明文传输的,抓包就拿到了。正确做法是套一层 Caddy:
aria.yourdomain.com {
reverse_proxy /jsonrpc localhost:6800
reverse_proxy localhost:6880
}
Caddy 自动申请 HTTPS 证书。然后:
- AriaNg 里 RPC 地址改成
https://aria.yourdomain.com/jsonrpc - 防火墙只放行 443,6800/6880 全部关掉
sudo ufw allow 443/tcp
sudo ufw deny 6800
sudo ufw deny 6880
反向代理的完整配置参考 Caddy 反向代理指南。
配好之后,下载任务可以从好几个地方发起。
AriaNg 首页直接粘链接、磁力、种子文件都行。最常用。
装个 "Aria2 for Chrome/Edge" 或者 "Aria2 Explorer" 之类的扩展,配置 RPC 地址和密钥后,点右键"用 Aria2 下载"就把任务扔到服务器上了。这才是离线下载最爽的用法 —— 公司电脑看到大文件,右键一按,家里 VPS 开始下。
Aria2 的 RPC 是标准 JSON-RPC 2.0,能直接被脚本调用:
# 添加一个下载任务
curl -s http://localhost:6800/jsonrpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "aria2.addUri",
"params": ["token:你的RPC_SECRET", ["https://example.com/file.zip"]]
}'
# 查看所有下载任务
curl -s http://localhost:6800/jsonrpc -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":"1","method":"aria2.tellActive","params":["token:你的RPC_SECRET"]}'
# 全局暂停
curl -s http://localhost:6800/jsonrpc -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":"1","method":"aria2.pauseAll","params":["token:你的RPC_SECRET"]}'
token: 前缀别漏 —— 这是最容易踩的坑,漏了直接返回 "Unauthorized"。
常见方法:aria2.addUri(加任务)、aria2.tellActive(活动任务)、aria2.tellStatus(单个任务状态)、aria2.pause/pauseAll、aria2.remove、aria2.getGlobalStat(全局速度)。做自动化(比如监听某个 RSS 自动下新番)就是靠这套接口。
AriaNg 是响应式网页,手机浏览器直接开就行;也有 AriaNg 的 App 壳。躺着也能加任务。
这是 Aria2 相比 qBittorrent 的一大优势场景 —— 直接把下载目录指到 rclone 挂载的网盘:
dir=/mnt/cloud/downloads
下载完的文件直接落到网盘,不占 VPS 本机硬盘。注意两点:
- 网盘挂载要用
--vfs-cache-mode full,不然 Aria2 的随机写会失败或极慢 - 缓存盘要够大 —— 下 50G 的文件,本地缓存可能也要吃掉几十 G,容易把系统盘撑爆
挂载方法看 VPS 挂载网盘扩容。下大文件前先确认本机 df -h 有余量,被撑爆的急救见 VPS 硬盘满了怎么办。
① RPC 绝不裸奔公网。 这是最重要的一条。rpc-secret 是明文传输的,直接暴露 6800 等于把下载器借给别人用。要么只监听内网 + SSH 隧道,要么走 Caddy 反代加 HTTPS。
② 别监听 0.0.0.0 之外的意外地址。 rpc-listen-all=true 只有在前面有反代/防火墙兜底时才安全。
③ 限速别忘。 VPS 流量按量计费的话,跑满带宽一天就能把月流量烧光。Aria2 支持限速:
# 全局限速 10M/s
curl -s http://localhost:6800/jsonrpc -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":"1","method":"aria2.changeGlobalOption","params":["token:你的RPC_SECRET",{"max-overall-download-limit":"10M"}]}'
或者在配置里写死 max-overall-download-limit=10M。流量监控一定要接上,见 VPS 流量监控和超额预警。
④ 下载内容自己心里有数。 VPS 用来下盗版内容、做种分发,很多服务商条款里是禁止的,被投诉可能直接封机器。这条自己把握。
AriaNg 连不上 RPC
按顺序查:systemctl status aria2 服务在不在跑 → ss -lntp | grep 6800 端口有没有监听 → 防火墙放行了没 → RPC 密钥对不对 → 跨域报错就加 rpc-allow-origin-all=true。
提示 Unauthorized
RPC 密钥不对,或者 API 调用时漏了 token: 前缀。
下 BT 完全没速度
九成是 tracker 没配或者过期了。更新 bt-tracker(见上文)。另外确认 VPS 的 UDP 端口没被封 —— 有些厂商默认封 BT 端口,这种情况找客服问或者换端口。
HTTP 直链下到一半失败
服务器不支持断点续传,或者被限速掐了。试试把 split 和 max-connection-per-server 都降到 1-2 再试。有些站还需要 Cookie 鉴权,Aria2 加 --header="Cookie: xxx" 或者用 --load-cookies 读浏览器导出的 cookies.txt。
磁盘 IO 打满
file-allocation 设成 falloc 但文件系统不支持,或者并发任务太多。参考 磁盘 I/O 很高怎么办。
重启后未完成的任务没了
save-session 和 input-file 没配,或者路径没写对。两个都要配,且指向同一个文件。
1 核 1G 的小机器能跑吗
能。Aria2 本身占用很低,内存主要花在 disk-cache 和分片缓冲上。1G 内存的话把 disk-cache 降到 16M、split 降到 8、并发任务减到 2,跑得动。
-
rpc-secret设了强随机串,不是默认值 - RPC 没有用 IP 明文暴露,走了 HTTPS 反代或只监听内网
- 6800 / 6880 端口对公网关闭,只放行 443
- 下载进程用专用用户跑,不是 root
-
continue=true、save-session、input-file都配了(断点续传 + 重启恢复) -
bt-tracker配了,并挂了定时任务自动更新 -
max-overall-download-limit按流量套餐设了限速 - 磁盘用量和月流量都接了告警
- 下到网盘的话,确认挂载用了
vfs-cache-mode full且缓存盘够大
- VPS 搭建 qBittorrent WebUI — 玩 PT 站点更顺手的选择
- VPS 挂载网盘扩容 — 让下载直接落到网盘里
- VPS 流量监控和超额预警 — 避免下载把流量跑超
- VPS 硬盘满了怎么办 — 下载目录撑爆磁盘的急救
- VPS 磁盘 I/O 很高怎么办 — 下载把 IO 打满的排查
