云服务器使用 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 服务即可在云端服务器上正常工作,为自动解析网盘分享链接并添加下载任务提供可靠支持。希望本文能为相关项目提供清晰的技术指导和实践参考。

相关推荐
yl--炼气1 小时前
windows下wsl-ubuntu子系统的位置怎样从C盘转到其他盘
linux·运维·ubuntu
博睿谷IT99_1 小时前
红帽认证 Linux安全 级别
linux·运维·安全
超爱吃香菜的菜鸟2 小时前
关于我的服务器
运维·服务器
Cv打怪升级2 小时前
ubuntu 常用指令
linux·运维·ubuntu
用手码出世界2 小时前
【Linux】进程池bug、命名管道、systemV共享内存
linux·运维·bug
LL1681992 小时前
SSM考研助手管理系统
java·服务器·开发语言·数据库·学习
半吊子的程序狗3 小时前
docker测试镜像源
运维·docker·容器
MobiCetus4 小时前
Linux Kernel 7
linux·运维·服务器·windows·ubuntu·centos·gnu
西洼工作室4 小时前
centos时间不正确解决
linux·运维·centos
码--到成功4 小时前
向量数据库Qdrant 安装 不使用docker
运维·docker·容器