云服务器使用 aria2 并启用 RPC 进行下载服务

在云端服务器上利用 aria2 实现高速下载、断点续传与自动任务管理是一种常见方案。aria2 支持多协议下载,并通过内置的 JSON-RPC 接口提供远程调用能力,从而可以结合 Python 脚本自动解析网盘分享链接并生成下载任务。

本文将以 CentOS 7 系统为例,详细讲解如何安装并配置 aria2,确保 RPC 服务可用,以及如何验证并调试相关功能。

文章目录

  • 环境准备与安装
    • [aria2 配置文件编写](#aria2 配置文件编写)
    • [创建 aria2 systemd 服务单元](#创建 aria2 systemd 服务单元)
    • 防火墙与端口开放
  • [RPC 服务测试](#RPC 服务测试)
    • [使用 curl 添加下载任务](#使用 curl 添加下载任务)
    • [使用 Python 脚本添加下载任务](#使用 Python 脚本添加下载任务)
  • 常见问题与排查
  • 总结

环境准备与安装

需要在 CentOS 7 上安装 aria2。在 CentOS 7 中 aria2 包通常存在于 EPEL 仓库中,因此需要先启用 EPEL 仓库。

启用 EPEL 仓库并安装 aria2 ,执行以下命令启用 EPEL 仓库并安装 aria2。

bash 复制代码
sudo yum install epel-release -y
sudo yum install aria2 -y

安装完成后,可以通过命令 aria2c --version 检查 aria2 版本,确认程序已安装。

aria2 配置文件编写

aria2 默认不会启用 RPC 服务,需要通过配置文件开启。

下面提供一个示例配置文件,建议存放在 /etc/aria2/aria2.conf 中。

ini 复制代码
# 启用 RPC 服务,并允许所有来源访问
enable-rpc=true
rpc-listen-all=true
rpc-allow-origin-all=true

# 如需安全验证,则设置访问密钥(远程调用时须携带 token:your_secret_here)
rpc-secret=your_secret_here

# 下载相关配置
max-concurrent-downloads=5
continue=true
max-connection-per-server=16
split=16

# 指定下载目录与会话文件
dir=/data/downloads
input-file=/etc/aria2/aria2.session
save-session=/etc/aria2/aria2.session
save-session-interval=60

# 日志文件(便于排查问题)
log=/var/log/aria2.log

确保 /data/downloads 目录已存在,并赋予合适权限;其中/etc/aria2/aria2.session 文件如果不存在,需要手动创建;如果不需要 token 验证,可删除或注释掉 rpc-secret 项,但建议使用以保证安全。

创建 aria2 systemd 服务单元

为确保 aria2 后台自动启动并实现开机自启,建议利用 systemd 管理 aria2 服务。

/etc/systemd/system/aria2.service 中创建服务文件。

ini 复制代码
[Unit]
Description=Aria2c Download Manager
After=network.target

[Service]
# 根据实际情况选择运行用户,推荐使用专用用户 aria2,若不存在需创建
User=aria2
Group=aria2
WorkingDirectory=/data/downloads
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

如果系统中尚无 aria2 用户,则创建专用账户。

bash 复制代码
sudo useradd -r -s /sbin/nologin aria2

调整相关目录权限,确保 aria2 用户对 /data/downloads/etc/aria2 有读写权限。

bash 复制代码
sudo mkdir -p /data/downloads
sudo chown -R aria2:aria2 /data/downloads
sudo chown -R aria2:aria2 /etc/aria2

最后重新加载 systemd 并启动 aria2 服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl start aria2
sudo systemctl enable aria2

在服务启动后,可以执行 sudo systemctl status aria2 检查状态,确认显示类似如下信息。

复制代码
● aria2.service - Aria2c Download Manager
   Loaded: loaded (/etc/systemd/system/aria2.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2025-03-10 10:11:56 CST; ... ago
 Main PID: 9374 (aria2c)
   CGroup: /system.slice/aria2.service
           └─9374 /usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf

Mar 10 10:11:56 VM-0-11-centos aria2c[9374]: 03/10 10:11:56 [NOTICE] IPv4 RPC: listening on TCP port 6800
Mar 10 10:11:56 VM-0-11-centos aria2c[9374]: 03/10 10:11:56 [NOTICE] IPv6 RPC: listening on TCP port 6800

显示状态为 active (running) 即表示服务已成功启动。

防火墙与端口开放

为确保远程设备能够通过 RPC 调用 aria2,需要开放 6800 端口。

检查防火墙是否允许 6800 端口访问。

bash 复制代码
sudo firewall-cmd --add-port=6800/tcp --permanent
sudo firewall-cmd --reload

若返回"Warning: ALREADY_ENABLED: 6800:tcp",说明该端口已开放。

可通过命令检查。

bash 复制代码
sudo firewall-cmd --list-ports

应在列表中看到 6800/tcp

同时如果服务器处于云平台(如阿里云、腾讯云等),还需检查云安全组规则,确保 6800 端口对外开放。最后通过 sudo netstat -tulnp | grep 6800 检查 aria2 是否监听在 0.0.0.0:6800,确保所有 IP 均可访问。

RPC 服务测试

使用 curl 命令测试 aria2 RPC 服务是否可用。在远程或本机上执行以下命令(注意 JSON 格式需要转义双引号):

bash 复制代码
curl -d "{\"jsonrpc\": \"2.0\", \"id\": \"test\", \"method\": \"aria2.getVersion\", \"params\": [\"token:your_secret_here\"]}" -H "Content-Type: application/json" http://110.140.221.86:6800/jsonrpc

如果返回如下 JSON 信息:

json 复制代码
{
  "id": "test",
  "jsonrpc": "2.0",
  "result": {
    "enabledFeatures": ["Async DNS", "BitTorrent", "Firefox3 Cookie", "GZip", "HTTPS", "Message Digest", "Metalink", "XML-RPC"],
    "version": "1.34.0"
  }
}

则表示 RPC 服务已成功启用,版本号为 1.34.0,并且各项功能均正常工作。

当 RPC 服务验证成功后,可以通过远程调用添加下载任务。下面提供两种方式进行说明。

使用 curl 添加下载任务

执行以下命令,添加一个下载任务(以下载示例文件为例):

bash 复制代码
curl -d "{\"jsonrpc\": \"2.0\", \"id\": \"test\", \"method\": \"aria2.addUri\", \"params\": [\"token:your_secret_here\", [\"https://example.com/file.zip\"]]}" -H "Content-Type: application/json" http://110.140.221.86:6800/jsonrpc

返回结果类似:

json 复制代码
{
  "id": "test",
  "jsonrpc": "2.0",
  "result": "2089b05ecca3d829"
}

任务 ID 表示任务已成功加入下载队列。

使用 Python 脚本添加下载任务

利用 Python 的 requests 库实现自动添加下载任务,示例代码如下:

python 复制代码
import requests
import json

# 远程 aria2 RPC 地址(公网 IP 或域名)
ARIA2_RPC_URL = "http://110.140.221.86:6800/jsonrpc"
ARIA2_SECRET = "token:your_secret_here"

def add_download(url):
    payload = {
        "jsonrpc": "2.0",
        "method": "aria2.addUri",
        "id": "test",
        "params": [ARIA2_SECRET, [url]]
    }
    headers = {"Content-Type": "application/json"}
    response = requests.post(ARIA2_RPC_URL, data=json.dumps(payload), headers=headers)
    return response.json()

# 测试添加下载任务
download_link = "https://example.com/file.zip"
result = add_download(download_link)
print(result)

成功返回后,会显示任务 ID,说明任务已添加至 aria2 下载队列。

常见问题与排查

在部署使用aria2服务及RPC接口时,常见的问题通常集中在系统用户权限、文件目录访问权限、以及RPC配置请求格式等几个方面。为避免以上常见问题,应确保系统用户、工作目录、权限设置正确,RPC 请求的 JSON 格式符合规范并正确转义。

错误类型 错误提示 可能原因 解决方法
用户权限错误(systemd) status=217/USER 配置文件中指定的用户或用户组不存在 检查并确保systemd配置文件中指定的UserGroup存在,并具备正确权限
目录权限错误 status=200/CHDIR 指定的工作目录不存在或无权限访问 确保WorkingDirectory路径存在,且运行用户有读写权限
RPC连接错误 无法连接RPC aria2 RPC未正确启动或端口未监听 检查RPC是否启用并监听正确端口,确保aria2.conf中的RPC配置正确并已开启
用户权限问题 status=217/USER 用户不存在或权限不够 检查aria2运行用户,确保其存在且对下载目录有读写权限
RPC 请求错误 JSONRPC解析错误 JSON请求字符串未正确转义 RPC请求中的JSON字符串必须正确转义,如:"{\"jsonrpc\": ...}"

总结

本文详细介绍了如何在 CentOS 7 环境下安装与配置 aria2,并通过 systemd 启动服务、配置防火墙、启用 RPC 服务以及通过 curl 和 Python 进行远程调用。按照本教程配置完成后,aria2 RPC 服务即可在云端服务器上正常工作,为自动解析网盘分享链接并添加下载任务提供可靠支持。希望本文能为相关项目提供清晰的技术指导和实践参考。

相关推荐
amber66666!30 分钟前
RPC是啥?
网络·网络协议·rpc
乙龙1 小时前
在麒麟系统(基于Ubuntu或Debuntu)的离线环境中创建本地APT仓库
linux·运维·ubuntu·kylin
舰长1151 小时前
Ubuntu docker安装milvusdb
linux·运维·服务器
niuTaylor2 小时前
Linux驱动开发实战之PCIE驱动(一)
linux·运维·驱动开发
云动雨颤2 小时前
Xshell7连接Debian12系统,中文显示乱码,解决办法一览!
运维·debian
s_little_monster2 小时前
【Linux】深入理解进程和文件及内存管理
linux·运维·服务器·经验分享·笔记·学习·学习方法
一袋米扛几楼982 小时前
【Devops】DevOps and CI/CD Pipelines
运维·ci/cd·devops
JuiceFS3 小时前
DeepSeek 3FS 与 JuiceFS:架构与特性比较
运维·云原生