Aria2 部署搭建

有时候个人服务器需要用到 BT 离线下载功能, 这种时候就需要用到 aria2 来搭建服务.

以下服务搭建基于 debian 系的发行版, redhat 其实流程也差不多

这里直接通过命令行安装配置就行:

1
2
3
4
5
# 安装配置软件
sudo apt install aria2

# 查看软件版本, 我这边目前版本是 1.37.0
aria2c --version

确认目前完版本之后就是就是准备为服务配置系统相关设置.

系统管理

这里需要创建新的 Linux 账号来托管下载权限, 并且设置主要配置文件夹:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 构建名为 aria2 的系统托管用户
# -r: 系统账号
# -s: 不允许 shell 交互
sudo useradd -r -s /sbin/nologin aria2

# 默认会创建 aria2 组, 但是如果安装 nginx 需要暴露访问的话建议加入 www-data 组
sudo usermod -aG www-data aria2

# 确认用户分配的信息
id aria2

# 创建系统配置目录和文件和赋予权限
sudo mkdir /etc/aria2
sudo touch /etc/aria2/aria2.env
sudo touch /etc/aria2/aria2.conf
sudo chown -R aria2:aria2 /etc/aria2

这样就可以配置 aria2 最小权限运行的系统账号, 符合安全部署服务的规则.

服务构建

这里直接编写系统单元服务, 将 aria2 服务注册到 linux 后台自动运行管理:

1
2
# 创建系统单元文件
sudo vim /etc/systemd/system/aria2.service

写入系统服务配置( /etc/systemd/system/aria2.service ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]
Description=Aria2 Download Service
Documentation=https://aria2.github.io
After=network.target local-fs.target

[Service]
Type=simple
User=aria2
Group=aria2
EnvironmentFile=/etc/aria2/aria2.env
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
Restart=on-failure
RestartSec=5
PrivateTmp=true

# 这里文件描述符最好适当扩大, 因为同时下载可能占用大量文件描述符
LimitNOFILE=655350

[Install]
WantedBy=multi-user.target

完成之后就更新下系统服务, 不过暂时先不要启动服务:

1
sudo systemctl daemon-reload 

之后就是准备 Aria2 的相关配置编写流程.

Aria 配置

现在就是关键的 aria2 配置, 这里按照官网来追加修改部分配置:

1
2
# 以 aria2 权限创建对应配置文件
sudo -u aria2 vim /etc/aria2/aria2.conf

内部配置内容如下, 可以酌情按照自身配置来修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
## ===========================================================================
## Aria2 推荐配置
## 参考网站: https://aria2.github.io/manual/en/html/aria2c.html#options
## ===========================================================================



## ===========================================================================
## 文件保存相关
## ===========================================================================

# 文件保存目录, 建议采用外部扩展的硬盘分配空间
# 我这边 /data 是额外扩展的一块 4T 空间专门下载的硬盘
dir = /data/downloads

# 启用磁盘缓存(下载数据临时存放在内存中最后同步落地), 0为禁用缓存, 需1.16以上版本, 默认:16M
# 计算公式: disk-cache = 服务器空闲内存 × (1/4 ~ 1/2)
# 机械硬盘(HDD): 空闲内存的 1/2, 固态硬盘(SSD): 空闲内存的 1/4, HDD 超 4GB 缓存无增益
# 通过 free -h 命令获取目前稳定的内存, 比如 8G 其他应用占用最后为 7.2G, 并且采用机械硬盘
# 那么最后得出 7.2G × 1/2 = 3.6G = 3600M, 因为机械硬盘有边际效应, 内存再快最后也落地硬盘
# 另外如果是单独的固态硬盘, 直接设置为 0 即可(固态硬盘本身够快)
# 还有个问题就是这是个单任务配置, 多个任务可能会导致内存全部消耗殆尽
# 在日常当中其实用的比较多配置如下 16M~125M 取值即可, 我都是以 16G内存=512M 以此为基准递减处理:
#
# 16GB 512M(基准值) 512M(HDD 适用)/ 256M(SSD 适用)
# 8GB 512M ÷ 2 = 256M 256M(HDD 适用)/ 128M(SSD 适用)
# 4GB 512M ÷ 4 = 128M 128M(HDD 适用)/ 64M(SSD 适用)
# 2GB 512M ÷ 8 = 64M 64M(HDD 适用)/ 32M(SSD 适用)
# 1GB 512M ÷ 16 = 32M 32M(HDD 适用)/ 16M(SSD 适用)
# 512MB 512M ÷ 32 = 16M 16M(仅 HDD 适用,SSD 建议禁用)
#
# 所以按照上面比例取值都行
disk-cache=32M

# 启用断点续传, 断点续传建议开启, 家庭网络可能难免出现网络波动情况
continue=true

# 始终尝试断点续传, 无法断点续传则终止下载, 默认:true
# 如果设置 continue=true 最好启动该配置, 配合起来就是 "优先续传, 失败则终止任务"
always-resume=false

# 在Aria2退出时保存错误|未完成的下载任务到会话文件
# 如果开启 RPC 的话, 远程会话相关的保存也是放置于此
# 这里有个很重要的细节, 那就是 session 文件不仅需要文件本身的写权限, 还需要其父目录w(写入)+ x(执行)权限
# 所以你如果创建 session 文件到其他目录没有对应 w 权限会导致无法序列化文件
# 一般为了安全最好创建在下载目录之中且后面页面展示隐藏和禁止访问 aria2.session 文件
input-file=/data/downloads/aria2.session
save-session=/data/downloads/aria2.session


# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
# 默认保存单位秒, 一般其实 30~60s 即可, 太频繁也是一直占用磁盘IO
save-session-interval=30


# 获取服务器文件时间,默认:false
# 这个配置其实有争议, 因为他是识别获取远程文件的时间戳, 属于很不可控的配置
# 而且异常时间戳可能导致文件排序混乱, 导致暴露给 web 服务的文件列表时序错乱
# 很容易出现一大堆如 1970 年、未来时间 之类时间戳, 所以在经过一段时间之后将其设置为 false
remote-time=false



## ===========================================================================
## 下载连接相关
## ===========================================================================

# 最大同时下载任务数, 运行时可修改, 默认:5
# 注意: 这个配置也是很关键的, 如果设置过多任务可能配合 disk-cache 占用直接爆内存
# 但是如果是 BT 做种任务可能需要调整多点, 方便将本地资源共享给其他 BT 用户
max-concurrent-downloads=5

# 同一服务器连接数, 添加种子任务时可指定, 默认:1
# 官方的 aria2 最高设置为16, 如果需要设置任意数值请重新编译 aria2
# 在使用多次之后发现, 现有很多服务器有连接数的防护(同个客户端太多连接数把你IP拉黑)
# 以前一直在想为什么官方同一连接要设置1这么少, 直到后面多次掉坑导致IP被某些文件下载服务商拉黑才后悔莫及
# 建议 1~2 这两个值, 其实如果不清楚最好设置成官方推荐默认的 1
max-connection-per-server=1

# 整体下载速度限制, 运行时可修改, 默认:0(不限制)
# 这个其实需要结合你本身带宽来判断, 如果你是家庭宽带混合且需要额外设备需要网络的时候需要配置该值
# 计算公式: overall-download-limit = 家庭宽带下行带宽 × 60%(预留 40% 给其他设备, 可以适当调高)
# 比如 100M 宽带(100 ÷ 8, 下载速度约 12.5MB/s) → 限制为 7-8MB/s(12.5×0.6≈7.5, 这里取地板数 7M)
# 这里可以设置为0, 然后在加入种子任务的时候在 GUI 中动态调整
max-overall-download-limit=0

# 整体上传速度限制, 运行时可修改, 默认:0(不限制)
# 注意: 这个最好设定处理下, 否则运营商看到这么高上传流量就知道有问题直接限流
# 比较安全的提交流量值为 500K-1M(100M宽带), 这样可以尽量避免触发运营商风控, 通知回复可以推说是监控流量等
max-overall-upload-limit=500K

# 单个任务上传速度限制, 默认:0(不限制)
# 上面的 max-overall-upload-limit 都是基于全局任务上传, 这里就是针对单个种子任务的限制上传
# 实际上 max-overall-upload-limit 可以设置为 0, 然后专门设定 max-upload-limit 值
# 这个值需要和种子任务同时运行的数量挂钩, 如果本身想全局限制 500K 上传且同时运行的任务要 5 个
# 那么最后 500K ÷ 5 = 100K 配置即可, 这里设置为 0 是应为采用了全局限制
max-upload-limit=0

# 单个任务最大线程数, 添加时可指定, 默认:5
# 注意: 如果要防止避免被下载服务商 ban 掉 IP, 最好遵循 split ≤ max-connection-per-server
# 但是直接单链接+单线程下载速度效率有点差, 这时候就可以采用 2 双分片下载, 一般有几个取值
# 1 - 单连接数单线程 - 最安全的下载模式, 流量上比较节制没有异常
# 2 - 单连接数双线程 - 双分片做文件下载, 比较符合正常 Web 下载规则
# 3~5 - 单连接数3~5线程 - 比较明显的多条连接大流量下载, 如果24小时运行就是很明显的特征
split=2

# 最小文件分片大小, 添加时可指定, 取值范围1M~1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
# 这个值就是结合 split 线程数量分片下载, 如果 split=2 那么就会运行 0~20M/20~40M 两个线程任务下最后合并
min-split-size=20M


## ===========================================================================
## 系统核心相关设置
## ===========================================================================

# 系统日志的等级, 默认: debug
log-level=info

# 禁用IPv6, 默认:false
# 目前家用宽带的 IPv6 普及率太低了, 所以可以直接关闭 IPv6 相关
disable-ipv6=true

# 启用 mmap 内存分页, 默认: false
# 这里是将磁盘文件映射到 Aria2 进程的虚拟内存地址空间, 从而减少 CPU 占用并提升大文件 I/O 效率
# 只有少量老旧系统对其不支持, 新的 linux 系统对于大文件的提升挺大, 建议开启
enable-mmap=true

# 事件轮询方式, 可选:epoll, kqueue, port, poll, select, 不同系统默认值不同
# 这里 linux 直接采用 epoll 即可
event-poll=epoll

# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
# 这里没什么可说的, 我这边用 debian 服务器直接选 trunc 即可
file-allocation=trunc

# 使用 UTF-8 处理 Content-Disposition ,默认:false
# 用于指定下载文件的建议文件名, 避免当下载文件名为中文|日文等非 ASCII 字符时出现乱码
content-disposition-default-utf8=true

# 禁用 netrc
# netrc 其实就是配置授权文件然后加载特定加密网站的时候会自动模拟输入账号密码
# 除非有特定站点需求, 否则一般不需要用到
no-netrc=true

## ===========================================================================
## WebRPC相关设置
## ===========================================================================

# 启用RPC, 默认:false
# 用来给外部 GUI 做接口链接
enable-rpc=true

# 允许所有来源, 默认:false
rpc-allow-origin-all=true

# 允许外部访问, 默认:false
# 支持 0.0.0.0 外部访问, 内网
rpc-listen-all=true

# RPC端口, 仅当默认端口被占用时修改, 默认: 6800
# 建议不要采用官方的端口号, 避免被直接嗅探到服务, 不过内网可能就没什么关系
rpc-listen-port=6800

# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
# 这里就是远程链接的 token, 最好设置复杂点避免被入侵
rpc-secret=meteorocat



## ===========================================================================
## BT/PT下载相关设置
## ===========================================================================

# BT 外网扩展地址, 这个是暴露外网的配置项, 用于配置公网的IP地址
# 也就是如果你的服务器有公网IP, 那么想要让其支持 DHT 相关服务就要把这个配置设置为公网IP
bt-external-ip=123.123.123.123

# BT 监听端口(TCP), 默认:6881-6999(TCP协议)
# 资源下载端口, 如果对公网开放最好设置为 dht-listen-port 一致并且开放 UDP + TCP 协议接入
listen-port=16881-16885

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
follow-torrent=true

# 启用节点交换, PT 下载(私有种子)会自动禁用, 默认:true
enable-peer-exchange=true

# 启用局域网发现功能, 默认: false
# 让同一局域网内的 BT 下载设备(如其他服务器、电脑、路由器)自动互相发现并传输数据,显著提升局域网内 BT 下载速度
bt-enable-lpd=true

# DHT 网络引导节点, 用于解决 BT 初期无速度问题
# DHT(分布式哈希表)是 "节点发现网络", 只有加入 DHT 才能找到其他正在下载|上传同一资源的用户("peer")
# 还有一些海内外的公共 DHT 服务节点, 可以考虑加入其中加速种子资源的下载速度
# 这里有几个公共 DHT 服务节点提供参考:
# - router.bittorrent.com:6881
# - router.utorrent.com:6881
# - dht.transmissionbt.com:6881
# 一般默认选择 dht.transmissionbt.com:6881 即可
dht-entry-point=dht.transmissionbt.com:6881

# DHT 网络监听端口, 默认: 6881-6999(UDP协议)
# 如果是对公网服务暴露的情况, 最好修改默认端口号避免简单被嗅探到
# 这里会尝试加入 dht-entry-point 配置的引导节点, 然后不断查询目前的做种节点进行下载
# 该值最好和 listen-port 一致, 可以有效利用协议不同的端口复用避免忘记端口号
dht-listen-port=16881-16885

# IPv4 DHT 文件路径,默认:$HOME/.aria2/dht.dat
dht-file-path=/data/dht.dat

# 启用 IPv6 DHT 功能, PT 下载(私有种子)会自动禁用,默认:false
# 在没有 IPv6 支持的环境开启可能会导致 DHT 功能异常
enable-dht6=false

# 客户端伪装, PT 站点需要
# 部分 PT 站对 Aria2 有特殊封禁机制, 客户端伪装不一定有效, 且有封禁账号的风险
peer-agent=Deluge 1.3.15
peer-id-prefix=-DE13F0-

# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件, 建议开启
force-save=true

# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=false

# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
# 最好种子文件存底, 其实也占用不了多少空间, 后续有问题的时候方便单独提取下载
bt-save-metadata=true

# 加载之前已经保存的 .torrent 种子文件, 默认: false
# 当使用磁链下载时候优先尝试加载使用 bt-save-metadata 选项保存的文件
# 如果文件加载成功, 则不会从 DHT 下载元数据, 可以节省 DHT 请求时间
bt-load-saved-metadata=true


# 单个种子最大连接数, 默认:55
# 0表示不限制
bt-max-peers=60

# 最小做种时间, 单位:分
# 这里主要是做控制BT种子上传提交的配置速度控制, 一般配置 seed-ratio 来处理
seed-time=120

# 分享种子任务的上上比例, 默认:1.0
# 设置为 0 的时候代表关闭分享种子任务功能, 尽量保持非 0 传达分享精神
seed-ratio=1.0

# 分离做种任务
bt-detach-seed-only=true

# 仅对 BT 任务有效, 删除任务的时候会自动删除 .torrent 种子文件
# 只会删除通过 bt-save-metadata=true 保存的 .torrent 种子文件, 自己手动提交的 .torrent 种子文件不会被删除
# 不过如果是 *.aira2 文件可能就需要手动清理掉, 但是文件特征比较明显还是可以后台脚本批量处理
bt-remove-unselected-file=true


# 强制加密, 防迅雷必备, 默认: false
# 启用后将拒绝旧的 BT 握手协议并仅使用混淆握手及加密
# 可以解决部分运营商对 BT 下载的封锁, 且有一定的防版权投诉与迅雷吸血效果
# 此选项相当于 bt-require-crypto=true 和 bt-min-crypto-level=arc4 的快捷开启方式, 但不会修改这两个选项的值
# 不知道为什么有的版本启用之后还是默认最低加密是明文, 所以建议还是手动全部加上
bt-force-encryption=true
bt-require-crypto=true
bt-min-crypto-level=arc4

# 手动添加额外 tracker, tracker节点网站可以去以下地址查询
# https://cdn.jsdelivr.net/gh/ngosang/trackerslist@master/trackers_best.txt
# https://cdn.staticaly.com/gh/XIU2/TrackersListCollection/master/best.txt
# 不过编写的格式是 'bt-tracker=xxx,yyy,zzzz' 以逗号分割
bt-tracker=

在使用这么久之后感觉 Aria2 官方很多配置保持默认确实能够到达最大效率, 只有极少数极端情况需要处理.

后续创建额外的系统目录和文件, 还有相关的目录和文件授权机制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 生成会话文件
sudo touch /data/downloads/aria2.session
sudo chown aria2:www-data /data/downloads/aria2.session
sudo chmod 664 /data/downloads/aria2.session

# 生成 DHT 节点文件
sudo touch /data/dht.dat
sudo chown aria2:www-data /data/dht.dat
sudo chmod 664 /data/dht.dat

# 另外还需要注意下载目录的权限
# 确保 aria2 用户可读写, www-data 组可访问(Nginx 共享用)
sudo chown -R aria2:www-data /data/downloads
sudo chmod -R 775 /data/downloads

# 为下载目录设置 SGID (新下载的文件自动继承 www-data 组权限,Nginx 无需重复授权)
sudo chmod g+s /data/downloads

完成之后就可以开启服务确认是否运行:

1
2
3
sudo systemctl start aria2.service # 启动服务
sudo systemctl status aria2.service # 查看服务
sudo systemctl enable aria2.service # 开机启动

确认启动状态为 active 就代表启动成功, 对于公网做种的用户其实比较需要的关心的就以下选项:

  • bt-external-ip: 声明外部 DHT/BT 的资源后续地址
  • listen-port: BT 监听端口 - TCP 协议
  • dht-listen-port: DHT 监听端口 - UDP 协议

注意: 如果真的开启公网做种一定要确认云服务商打击BT力度怎么样, 有的云服务商发现做种行为会封禁账号和服务器!

Aria2Web配置

后台服务目前已经启动完成, 现在需要UI界面来动态添加下载任务处理, 这里采用 AriaNG

仅仅是作为 Web 页面, 可以直接命令行手动下载即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 进入临时目录并下载最新版本
cd /tmp && wget -O AriaNg.zip https://github.com/mayswind/AriaNg-DailyBuild/archive/master.zip

# 创建目录解压到目录
sudo mkdir /data/aria2ng
cd /data/aria2ng
sudo unzip /tmp/AriaNg.zip # 注意内部其实套一层 AriaNg-DailyBuild-master 目录
sudo cp -rf /data/aria2ng/AriaNg-DailyBuild-master/* .
sudo rm -rf /data/aria2ng/AriaNg-DailyBuild-master
sudo chown -R aria2:www-data /data/aria2ng
sudo chmod -R 775 /data/aria2ng

# 创建 Nginx 服务文件
sudo touch /etc/nginx/conf.d/aria2ng.conf

Aria2NGNginx 配置文件如下( /etc/nginx/conf.d/aria2ng.conf ), 先处理简单点:

1
2
3
4
5
6
7
server {
listen 80; # 如果冲突换个端口
server_name _;
root /data/aria2ng;
charset utf-8;
index index.html;
}

重启 Nginx 访问目标地址确认是否正确, 进入页面会提示 认证失败! 错误, 需要按照以下流程配置请求入口:

  1. 点击页面下的 系统设置 - AriaNG 设置
  2. 切换页面的 RPC 页面, 这里就是设置我们刚刚 RPC 信息的地方
    • Aria2 RPC 别名: 就是展示名而已, 随便其他都行
    • Aria2 RPC 地址: 这里就是我们开放的监听地址和端口(rpc-listen-port)
    • Aria2 RPC 协议: 如果是内网可以简单 http, 对于下载进度页面采用轮训 , 而 websocket 就是长链接
    • Aria2 RPC 请求方法: 建议采用 POST 即可
    • Aria2 RPC 请求头: 附加一些特殊的请求头信息, 用的请求会设置中转验证头信息
    • Aria2 RPC 密钥: 这里就是服务端配置的 rpc-secret 信息, 注意一定要设置复杂且不要用常用密码
  3. 修改的时候弹出需要重新加载, 点击 重新加载 之后会刷新页面, 如果没问题会在页面 Aria2 状态 显示 已连接

这里可以去测试找个 Ubuntu镜像种子 测试下载,
下载种子文件之后在 AriaNG 页面的 新建 - 文件夹图表点击 - 打开种子文件 提交 Ubuntu 种子文件即可.

在这个过程可以暂停之后查看 /data/downloads/aria2.session 是否会将资源进度序列化保存, 出现 ‘未能将会话序列化’ 就代表异常

如果能看到 aria2.session 已经生成记录任务并且资源文件下载完成, 那么就代表整体配置已经成功.

如果有个 Cloudflare 域名, 可以通过内部 Pages 功能做静态页面部署, Cloudflare 可以限额托管静态页面;
这部分功能托管在 Cloudflare 就不用自己的服务器上面部署 Web 功能, 这样效率更高点而且也不怕服务器宕机.

最好不要把 Aria2AriaNG 部署在同个服务器下, 因为挂机下载的时候网络带宽占用很大, 可能会导致 AriaNG 无法访问

目录展示

这一步用于直接 Web 页面展示下载目录文件列表, 这样就电脑|手机就不需要安装额外的应用就可以下载资源:

1
2
3
4
5
# 这里需要安装 Nginx 扩展的
sudo apt install nginx-extras

# 之后就是扩展配置文件
sudo touch /etc/nginx/conf.d/aria2files.conf

/etc/nginx/conf.d/aria2files.conf 文件配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
server {
listen 18888 reuseport; # 端口被占用的时候可以换个端口处理
server_name _;
charset utf-8;
root /data/downloads;

location / {
# 下载配置
client_max_body_size 4096m; # 一般 4G 大小差不多
client_body_buffer_size 128k; # 缓冲区大小(低内存设备可设为 64k)
proxy_buffering off; # 关闭代理缓冲,减少内存占用

# 目录展示
fancyindex on;
fancyindex_exact_size off; # 显示人性化文件大小(如 1.2G 而非字节数)
fancyindex_time_format "%Y-%m-%d %H:%M:%S"; # 时间格式优化
fancyindex_localtime on; # 使用本地时间(而非 UTC 时间)
fancyindex_hide_symlinks on; # 隐藏符号链接(避免暴露上级目录)

# 屏蔽掉指定文件
fancyindex_ignore "aria2.session" ".aria2" ".torrent" ".url" ".txt" "_____padding_file_" "rar" "zip" ".html" ".htm" ".link";

# 安全优化:禁止目录遍历(仅允许访问存在的文件/目录)
try_files $uri $uri/ =404;
}

# 禁止访问所有 . 开头的隐藏文件/目录(如 .aria2、.git)
location ~* /\. {
deny all;
return 404; # 用 404 隐藏文件存在性(比 403 更安全,避免泄露信息)
}

# 禁止访问特定后缀文件(即使知道路径也无法访问)
location ~* \.(torrent|aria2|url|txt|rar|zip|html|htm|link)$ {
deny all;
return 404;
}

# 禁止访问 aria2.session 文件(单独强化,避免通过路径直接访问)
location = /aria2.session {
deny all;
return 404;
}

# 禁止访问 padding 填充文件(BT 下载残留)
location ~* _____padding_file_ {
deny all;
return 404;
}
}

重新加载 Nginx 配置之后就能在浏览器看到效果, 这个过程一般不会出什么问题(有也是端口占用的情况).

Tracker源

常见的 BT 下载文件需要手动添加其他服务器源, 这样才能发扬 '我为人人, 人人为我' 的精神;
Tracker 服务器提供对应资源服务发现功能, 让同个资源下载用户进行互相分享.

如果配置 DHT 加入网络其实不用管, 因为本身就是从 DHT 网络就可以加载到所有分享节点, 但大部分情况没有对公网服务器就要手动配置

这里需要配置推荐几个好用的源地址资源:

常用的比较活跃的 Tracker 服务器节点都可以在这里面检索到, 可以直接运行命令来覆盖配置:

1
2
3
4
5
# Aria2 配置的内容 https://cf.trackerslist.com/best_aria2.txt
sudo sed -i "s|^bt-tracker=.*|bt-tracker=$(curl https://cf.trackerslist.com/best_aria2.txt | sed 's/,$//')|" /etc/aria2/aria2.conf

# 如果是空格换行格式的内容 https://cf.trackerslist.com/best.txt
sudo sed -i "s|^bt-tracker=.*|bt-tracker=$(curl https://cf.trackerslist.com/best.txt | sort -u | tr '\n' ',' | sed 's/^,//;s/,$//' | sed 's/&/\&/g')|" /etc/aria2/aria2.conf

这样就完成搭建完成整体的离线下载服务, 后续就是其他扩展配置的优化项变动.