如果你经常跟大文件、批量下载打好交道,Aria2 这个名字一定不陌生。它是一款轻量级、支持多协议的命令行下载工具,HTTP、HTTPS、FTP、SFTP、BitTorrent、Metalink 全都能接,而且多线程下载、断点续传、RPC 远程控制都是基础能力。我长期在 Linux 服务器和 NAS 上用它挂下载任务,稳定性比绝大多数图形界面下载工具都要好。这篇教程适合两类人:一是想在服务器或 NAS 上搭建一个长期可用的下载环境,二是听说过 Aria2 但被命令行劝退的新手。我会把安装、基础使用、配置调优、常见坑全部过一遍,按我实际跑过的方式写。
1. 内容整体设计与方案选型
1.1 Aria2 是什么,为什么值得折腾
Aria2 是开源项目,底层用 C++ 实现,一个可执行文件就能跑起来。它最大的特点就是“没有界面”,所有操作都通过命令行控制。这个特性看起来很原始,但这恰恰是它能长期稳定运行在嵌入式设备、路由器、NAS、云服务器上的原因。没有 GUI 进程,就没有随机崩溃、弹窗广告、后台驻留这些乱七八糟的问题,你甚至可以把它的日志关掉,让它在角落里安静地做任务。
它支持的协议非常全面。HTTP 和 HTTPS 是日常下载最常见的场景;FTP 和 SFTP 在拉取服务器文件时很管用;BitTorrent 和 Metalink 则覆盖了 P2P 下载场景。这意味着你不需要为不同下载方式装多个工具,一个 Aria2 全搞定。
对于下载速度,Aria2 的核心玩法是“多连接”:同一个文件可以切分成多个分段,每段建立独立连接同时下载。打个比方,就像你一个人搬砖和叫五个朋友一起搬砖的区别。配合良好的网络环境和服务器支持,速度提升非常明显,尤其是从那些单连接限速的上游服务器拉文件时。
1.2 为什么我最终选择 Aria2 而不是 wget 和 curl
很多人在服务器上习惯用 wget 或 curl 下载文件,这两个工具我也常用,但它们的定位就不是“高性能下载器”。wget 和 curl 确实能够完成下载任务,默认情况下它们几乎都是单连接去拉数据,遇到大文件或慢速服务器时,速度相当憋屈。虽然 curl 支持断点续传,但多线程下载、BT 协议、RPC 管理这些能力它很难提供。
我也试过一些图形界面下载工具,比如大家熟悉的各类下载器。它们优势是交互直观,但普遍的问题是:不能跑在无桌面的远程服务器上、需要额外安装一堆运行库、有些还有广告和自启动驻留。真正想在 NAS 或云主机上搭一个 7×24 小时的下载环境时,它们并不合适。
我用一个表格直接对比一下常见方案,能更直观看出 Aria2 的适用场景。
| 工具 | 多线程 | 断点续传 | 多协议 | RPC远程控制 | 适合无图形界面环境 |
|---|---|---|---|---|---|
| wget | 弱 | 支持 | HTTP/HTTPS/FTP | 无 | 可以但效率一般 |
| curl | 弱 | 支持 | 多种 | 无 | 可以做,不适合批量 |
| 图形下载器 | 支持 | 支持 | 有限 | 少 | 不适合 |
| Aria2 | 强 | 支持 | HTTP/HTTPS/FTP/SFTP/BT/Metalink | 支持 | 非常合适 |
所以我的选型理由很简单:要效率有效率,要协议有协议,要远程管理有远程管理,而且体积极小、依赖极少。一个不到 1MB 的二进制文件,放在树莓派里跑几个月不重启都没有问题。
2. 安装准备与跨平台安装实操
2.1 Linux 环境安装与版本验证
Linux 是 Aria2 的主场,绝大多数发行版官方源里都带了这个包。以 Ubuntu 和 Debian 为例,安装只需要一条命令:
sudo apt update sudo apt install aria2CentOS、Rocky Linux、Fedora 这类使用 dnf/yum 的系统也一样:
sudo yum install aria2 # 或 sudo dnf install aria2装完之后,立刻验证版本:
aria2c --version终端会输出 Aria2 版本号、编译选项、支持的协议列表等信息。正常情况下能看到类似 output 的字符串,里面带有aria2 version X.Y.Z。这个版本号值得留意,我建议至少 1.34 以上,旧版本在某些加密算法和 BT 服务器支持上会有问题。
如果你手头的系统比较老,官方源里的版本偏旧,也可以考虑去项目发布页下载编译好的二进制包,放到/usr/local/bin下并加上执行权限。不过大多数场景下直接 apt 或 yum 安装就够了,我不建议一上来就自己编译源码,除非你想深度定制功能。编译安装要装依赖、跑 configure、make,耗时不短,收益在这个场景下并不明显。
安装完成后,输入aria2c --help会看到一大串帮助信息。第一次看到这个输出别慌,不需要记住所有参数,只需要掌握几个核心参数就能覆盖 90% 的日常使用。
2.2 macOS 和 Windows 上的安装方式
macOS 用户只要装了 Homebrew,安装非常简单:
brew install aria2装好后同样用aria2c --version验证。macOS 上跑 Aria2 的情况大多是基于 Intel 或 Apple Silicon 芯片的 Mac 充当下载机,配合 RPC 模式使用很顺手。
Windows 稍微麻烦一点。Aria2 官方不提供 Windows 安装包,但提供了可直接运行的压缩包。去项目发布页下载对应的aria2-x.y.z-win-64bit压缩包,解压后里面有一个aria2c.exe。有两种使用方式:
第一种是把 exe 所在目录加入系统的 PATH 环境变量,之后就可以在任意路径打开 PowerShell 或 CMD 直接运行aria2c。第二种是每次通过完整路径调用,比如D:\tools\aria2\aria2c.exe --version。我推荐第一种,一劳永逸,后面配合脚本和 RPC 服务都方便。
Windows 下还经常有人问为什么双击 exe 没反应,因为 Aria2 是命令行程序,它没有界面,必须从终端里启动。你如果直接双击,它闪一下就退出了,这不是没装好,而是它根本没有 GUI 窗口。
注意:Windows 上如果下载的是原生版本,运行时会弹出防火墙提示。这是本地监听端口的功能,RPC 模式下才会用到,如果确定本机使用,点击允许即可。
除了原生 Windows 版本,也可以通过 Windows 包管理器安装。winGet 下面的命令也能搞定:
winget install aria2不过它本质上还是帮你下载解压了一份二进制。自己手动解压到固定目录更可控,方便后续做配置文件的统一管理。
3. 常见使用场景与参数配置
3.1 基础下载命令与多线程参数拆解
先看最简单的用法。下载一个文件:
aria2c 'https://example.com/file.zip'这条命令会启动一个下载任务,默认单连接下载,输出一些进度信息。但只这样用,根本体现不出 Aria2 的实力。真正关键的是两个参数:-x和-s。
aria2c -x 16 -s 16 -k 1M 'https://example.com/file.zip'-x 16表示对每个服务器最多建立 16 个连接。-s 16表示将文件拆分成 16 个分段下载。-k 1M表示每个分段最小大小是 1MB。
三个参数配合使用,下载一个几百 MB 的文件时,速度提升非常明显。这里要注意,分段不是越多越好。如果文件本身很小,强行拆 16 段反而会浪费握手时间;如果服务端有限制每个 IP 的连接数,单纯的-x 32也不会带来提升。我常用的经验是 8 到 16 之间取中间值,大多数服务器都能接受。
断点续传也是高频需求。下载中断了,不用重新开始,直接加-c参数重新执行原命令,Aria2 会检测已下载的分段并继续拉取剩余数据:
aria2c -c -x 16 -s 16 'https://example.com/large-file.zip'-c是--continue的缩写,这个参数在下载大文件时非常重要。经常有人从服务器拉几个 GB 的数据,中途网络断了一下,然后从头开始下,这种痛苦我太熟悉了。用了-c之后,至少不会做无谓的重试。
给下载文件改名、指定保存目录也是常用操作。用-o指定文件名,用-d指定目录:
aria2c -d /data/downloads -o backup.zip 'https://example.com/file.zip'注意-d要写在下载链接的前面,顺序上有时候严格,写错会导致文件名变成 URL 的一部分,所以建议把所有命令行参数放在 URL 之前。
3.2 批量下载与断点续传的正确姿势
批量场景下,一条条写命令太蠢了。Aria2 支持从文件读取多个下载链接,一次跑完:
aria2c -i urls.txturls.txt的每一行放一个 URL,也可以附带参数。比如:
https://example.com/a.zip dir=/data/downloads/a https://example.com/b.zip out=bbb.zip max-download-limit=1M这里每一行 URL 下面可以缩进写该任务专属的参数。没写参数的,就用命令行的默认值。这个特性很适合下载一批来自不同服务器、保存路径不同的文件。
批量下载时的速度控制也很重要。用-j控制同时下载几个任务:
aria2c -j 5 -i urls.txt-j 5表示最多同时执行 5 个任务。剩下的任务会排队等待,一个完成后再拉起一个新的。如果你不设置,默认值是 5,这个值对我来说比较合适。开太多任务会导致每任务分到的带宽被稀释,最终整体效率反而不高。
还有一个参数叫--max-download-limit,用来限制单个任务的速度:
aria2c --max-download-limit=2M 'https://example.com/file.zip'为什么要限速?因为跑在服务器或 NAS 上时,下载任务可能和业务流量抢带宽。限速不是为了慢,而是为了保证其他服务不被下载挤崩。
断点续传在批量场景下更要配合-c使用。比如脚本里写:
aria2c -c -j 3 -i urls.txt这样中途断电、重启、网络中断,下次重跑命令时已经完成的任务会被跳过,没下完的会继续,而不是全部重来。
3.3 使用 RPC 模式与 Web 管理界面
命令行一次跑一个任务没有太大压力,但如果你想随时查看任务列表、添加新任务,甚至开机后自动恢复所有未完成任务,就得启用 RPC 模式。RPC 是 Aria2 提供的一套本地接口,程序通过这个接口接受控制指令。
最简单的启动方式:
aria2c --enable-rpc --rpc-listen-all --rpc-secret=my-secret一条命令就让 Aria2 进入 RPC 模式,监听 6800 端口。--rpc-secret是访问令牌,相当于密码,这个必须设置。很多教程里不写这一项,结果任何一个能访问该端口的人都能往你的下载机里塞任务,非常危险。
但每次手动输这一长串参数太累了,所以更规范的做法是写一个配置文件aria2.conf,然后指定加载:
aria2c --conf-path=/etc/aria2/aria2.conf一个基础配置文件大概长这样:
# 下载目录 dir=/data/downloads # 文件保存方式,按种子结构创建目录 follow-torrent=true # 日志 log=/var/log/aria2.log log-level=notice # RPC 设置 enable-rpc=true rpc-listen-all=true rpc-listen-port=6800 rpc-secret=my-secret # 下载设置 max-concurrent-downloads=5 continue=true split=16 max-connection-per-server=16 min-split-size=1M对于这个配置,我逐项解释一下。dir指定默认下载目录;continue=true相当于全局开启断点续传;split和max-connection-per-server对应命令行的-s和-x;max-concurrent-downloads控制并发任务数。rpc-listen-all=true表示监听所有网卡,这意味着局域网内其他设备也能连上来,因此rpc-secret千万不能省。
有了 RPC 之后,就需要一个前端管理界面。我用得最顺的是 AriaNg,它是纯静态网页,不需要安装后端,只在浏览器里调用 Aria2 的 RPC 接口。下载它的静态文件放到任意目录,然后通过 nginx 或 Python 的 http.server 托管即可。
python3 -m http.server 8080 -d /srv/ariang浏览器访问http://服务器IP:8080,在设置里把 RPC 地址填成http://服务器IP:6800/jsonrpc,再填入 secret,就能看到所有下载任务。页面里可以添加 HTTP 链接、磁力链接、BT 种子,能实时看进度、速度、剩余时间,和图形下载工具体验没差别。这个方案我用了很久,稳定性相当好。
如果想开机自动运行配置文件里的 Aria2,可以写一个 systemd 服务。下面是一段最小可用的 service 文件:
[Unit] Description=Aria2 Daemon After=network.target [Service] Type=forking ExecStart=/usr/local/bin/aria2c --conf-path=/etc/aria2/aria2.conf -D Restart=on-failure [Install] WantedBy=multi-user.target保存到/etc/systemd/system/aria2.service,然后执行:
sudo systemctl daemon-reload sudo systemctl enable aria2 sudo systemctl start aria2-D参数表示后台守护进程模式。这样 Aria2 就会在系统启动时自动拉起,挂在那跑任务,不需要人为干预。这是整个方案里最“省心”的一环,弄好之后就可以忘掉它的存在。
4. 常见问题与排查技巧实录
4.1 高频报错与解决方案速查
实际使用中总会遇到各种意外,下面这张表是我多次折腾后整理的速查记录,遇到问题可以直接对应排查。
| 现象或错误 | 常见原因 | 解决办法 |
|---|---|---|
aria2c: command not found | 未安装或未加 PATH | 确认安装成功,检查命令所在目录是否在 PATH 中 |
| 下载返回 403 Forbidden | 服务器校验 Referer 或 User-Agent | 用--referer=网站URL和--user-agent=浏览器UA伪装 |
| HTTP 下载到一半断掉 | 网络不稳定 | 加-c断点续传,必要时用--retry-wait=5 --max-tries=10 |
| BT 下载一直 0% | 种子冷门或缺少 tracker | 手动添加公开 tracker,等待 DHT 生效 |
| 磁力链接转圈不出文件名 | 元数据未获取完全 | 多等一会,或先下种子文件;RPC 模式下会继续处理 |
| RPC 连接失败 | secret 不匹配、端口未监听、防火墙拦截 | 检查rpc-secret,再次确认端口和监听地址 |
| 下载内容总是覆盖同名文件 | 未使用完整文件名 | 用-o明确输出文件名,或用--auto-file-renaming=false按需处理 |
| 磁盘空间显示不足 | 下载目录所在分区已满 | df -h查分区占用,清理或换dir |
这里最容易忽视的是 403 问题。有些文件站点对下载链接做了 Referer 校验,从命令行直接下载时没有携带该站点页面信息,服务器就会拒绝。解决办法是手动指定:
aria2c --referer='https://example.com/download-page' 'https://example.com/protected-file.zip'同样,某些服务器会根据 User-Agent 判断请求来源,可以把--user-agent设成常用浏览器版本。这两个技巧在自动化脚本里很实用,可以避免大量下载失败。
4.2 下载速度迟迟上不去的排查思路
很多人的第一反应是“多线程参数不够大”,然后不断地把-x调高,效果往往并不理想。速度上不去的原因有很多,连接数只是其中一环。我总结了四个优先查的地方。
第一,先确认是不是服务端限制了单 IP 连接数。有的站点刻意限制并发连接,无论你设置-x 32还是-x 64,实际都只有几个连接生效。这时候可以看 Aria2 日志中每个连接的活动情况,如果大量连接一直处于空闲状态,说明服务器端已经拒绝了额外连接。
第二,检查磁盘写入速度。下载速度太快时,机械硬盘可能会成为瓶颈,尤其是在 NAS 上挂着 BT 任务还同时跑其他服务时。你可以用iotop或uptime看负载,如果磁盘一直在 100% 满转,先把 Aria2 的并发任务数调小,再观察速度。
第三,BT 任务的下载速度与种子健康度强相关。如果是冷门种子,全世界都没几个人在做种,任凭你怎么加连接数都白搭。这时候推荐的做法是手动添加一些公开的 tracker 地址,并开启 DHT 和本地节点发现:
aria2c --bt-tracker=url1,url2 --bt-enable-lpd --enable-dht true 'magnet:...'第四,检查网络出口带宽是否真的够。在服务器上先用大文件测试一下基础带宽,比如直接下载一个主流 Linux 发行版的 ISO 镜像,确定单连接下载速度能跑到多少。如果单连接就能跑满带宽,Aria2 多线程优化只是锦上添花;如果单连接本身就慢,重点要排查上游网络问题。
提示:不要只看瞬时速度,至少要观察 30 秒以上。Aria2 刚启动时速度波动很大,等到分段下载全部建立连接后,速度才会趋于稳定。
4.3 我踩过的一些坑和配置建议
第一个坑是 RPC 端口完全暴露在公网上。最初我把rpc-listen-all=true和默认 6800 端口直接暴露,还偷懒没设 secret,结果没过几天就发现下载目录里多了一堆莫名其妙的文件。之后我老老实实设置了强密码,同时用防火墙限制只有内网 IP 能访问 6800 端口。这个教训让我意识到,下载工具一旦开启远程管理,就等于把一台设备的管理入口打开,访问控制必须做好。
第二个坑是临时文件命名混乱。Aria2 下载过程中会生成.aria2结尾的临时控制文件,这个文件正常情况下下载完成后会自动消失。但如果磁盘空间不足或者进程被杀掉,临时文件和正式文件同时存在,很容易让人混淆哪些是完整的。我的建议是给下载任务指定独立的目录,下载完成后通过脚本把完成文件移走,这样临时文件不会和目标文件混在一起。清理时,也顺手删掉那些.aria2后缀文件。
第三个坑是 BT 做种时间太长。如果你用 Aria2 下完 BT 任务后一直保持做种,上传流量会一直占用带宽。大多数情况下,我下完资源不需要继续做种,所以会在配置里加:
seed-time=0seed-time=0表示下载完成后立即停止做种,不额外占用上行带宽。当然,如果你介意共享精神,想保持做种一段时间,可以设置seed-time=120表示做种 120 分钟,按需调整即可。
第四个坑是让 Aria2 运行在高权限用户下。有段时间我图省事,直接以 root 用户跑 Aria2。下载文件权限混乱不说,一旦 RPC 接口被攻击,攻击者就拥有 root 权限,风险极高。后来我单独创建了一个aria2user,用它运行 Aria2,并给下载目录分配好权限:
sudo useradd -r -s /bin/false aria2user sudo chown -R aria2user:aria2user /data/downloads然后用 systemd 以该用户启动,整个方案就干净很多。
最后再说一个使用习惯:配置文件的改动要慢一点,不要一次堆一堆参数。很多参数之间是有关联的,比如min-split-size调太大、split调太小,分段策略会失效。我通常每次只改一个参数,跑一两个文件验证效果后再改下一个。这样出了问题,也能立刻定位是哪一项配置导致。
如果你准备在服务器或 NAS 上搭一个长期运行的下载环境,我的建议是先把这个配置文件跑通,再挂到 systemd 上,最后再接入 Web 界面管理。这个过程走到位了,后面的日常使用基本就是“添加任务、查看进度、清理文件”三个动作,省心得很。以上就是我使用 Aria2 的全部经验,没有太高深的理论,但都是反复踩坑后沉淀下来的东西,希望对你有用。