HTTPS VPS 搭建 aria2 远程下载与在线播放服务

介绍

aria2 是一款轻量级的多协议(HTTP、BT、磁力链接等)命令行下载工具。在 VPS 环境下结合 AriaNg、Aria2App 等Web 前端,能够提供十分直观、敏捷的下载体验。另外一方面,本文使用 Nginx +  h5ai + Solid Explorer SFTP 客户端,来浏览和管理 aria2 下载的文件,最终可提供完备的在线播放、文件管理功能。

这篇教程,会将网络安全作为基本前提考虑。

环境准备

要使用这篇教程,你需要:

  • 硬件平台

Vultr VPS – 1024MB RAM, 25GB SSD, 1TB Bandwidth

  • 操作系统

Ubuntu Server 16.04

  • 软件

下面所列的软件,如果给出链接的,提前安装好,以备后续之需。

Nginx、PHP – 由于 h5ai 依赖 PHP,按链接提示配置好 Nginx 和 PHP,忽略 MySQL

aria2 – 这里通过 PPA 在 Ubuntu 16.04 上安装较新版本

AriaNg – 一个精良的 aria2 Web 前端,完全基于 HTML 与 JavaScript

Aria2APP – (可选)Android 平台上的 aria2 前端

h5ai – Web 文件浏览器,用以提供美观的在线文件浏览、视频播放功能

Solid Explorer -(可选)Android 上精良的文件管理器应用,用以支持 SFTP 文件管理

MX Player – (可选)Android 上一流的视频播放器,用以流媒体播放视频

开始搭建

Step 1. 创建一个 scp、aria2c 运行的最小权限用户

scp 是 Linux 下的远程安全拷贝工具。由于 aria2 本身不具备文件管理功能,本文用 scp 来管理 aria2 下载的文件,特别是删除文件旧下载文件。在手机端,你可以使用 Solid Explorer 等现代文件管理器提供的 UI 来方便地使用 scp。

$ sudo adduser aria2

如果你不需要最小权限用户执行 scp ,上述命令可更换为 useradd 命令,从而避免生成家目录,然后忽略以下面操作。

限制 aria2 用户的 SSH 权限

$ sudo vim /etc/ssh/sshd_config

...

Match User aria2
ForceCommand internal-sftp
PasswordAuthentication yes
#ChrootDirectory /var/www/html/downloads
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

参考

Step 2. 配置 aria2 服务 ( 基本但缺乏安全考量的 )

创建 aria2 文件目录

$ sudo mkdir /var/aria2

创建 aria2 运行所需的文件

$ cd /var/aria2 && sudo touch aria2.session dht.dat
$ sudo touch /var/log/aria2.log && sudo chown aria2:aria2 /var/log/aria2.og
$ sudo chown aria2:aria2 aria2* dht.dat

创建 aria2 配置文件

$ sudo vim /etc/aria2.conf 

# Basic Options
dir=/var/www/html/downloads
input-file=/var/aria2/aria2.session
log=/var/log/aria2.log
max-concurrent-downloads=3
max-connection-per-server=8
check-integrity=true
continue=true
# BitTorrent/Metalink Options
bt-enable-lpd=true
bt-max-open-files=16
bt-max-peers=15
dht-file-path=/var/aria2/dht.dat
dht-listen-port=6801
#enable-dht6=true
listen-port=6801
max-overall-upload-limit=0K
seed-ratio=1.0

# Advanced Options
#enable-mmap=true
force-save=false
file-allocation=none
log-level=warn
max-overall-download-limit=0K
save-session=/var/aria2/aria2.session
always-resume=true
split=5
min-split-size=10M
daemon=true

# RPC Options
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-listen-port=6800
rpc-secret=<yoursecret>
# Advanced Options

# SSL Options
#rpc-secure=true 
#rpc-certificate=/etc/letsencrypt/live/yourdomain.com/fullchain.pem
#rpc-private-key=/etc/letsencrypt/live/yourdomain.com/privkey.pem
 
# for Pan.baidu.com
user-agent=netdisk;7.8.1;Red;android-android;4.3

这里,记得用你的口令体替换 <yoursecret> ,后续将使用此口令来连接到你的 aria2 服务。

创建 aria2下载目录,并将属主改为 aria2

$ sudo mkdir /var/www/html/downloads
$ sudo chown aria2:aria2 /var/www/html/downloads

配置 aria2 Systemd 开机启动

$ sudo vim /etc/systemd/system/aria2.service

[Unit]
Description=Aria2c download manager
Requires=network.target
After=dhcpcd.service

[Service]
Type=forking
User=aria2
RemainAfterExit=yes
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2.conf
ExecReload=/usr/bin/kill -HUP $MAINPID
RestartSec=1min
Restart=on-failure

[Install]
WantedBy=multi-user.target

立即启动 aria2 服务

$ sudo systemctl start aria2

使能开机启动

$ sudo systemctl enable aria2

如果你的站点使用的是 HTTPS ,那么上面的配置还无法让你正常使用 aria2,因为 aria2 默认使用不安全的 HTTP RPC,会被现代浏览器的“禁止混合内容”安全策略拦截 。因此,我们需要为 aria2 开启 https 支持。假设你使用 Let’ Eencrypt SSL 证书,修改 aria2 配置文件取消 SSL 选项的注释,并设置好你的 Let’ Eencrypt  私钥路径

$ sudo vim /etc/aria2.conf 

... 
#Add SSL Support 
rpc-secure=true
rpc-certificate=/etc/letsencrypt/live/yourdomain.com/fullchain.pem
rpc-private-key=/etc/letsencrypt/live/yourdomain.com/privkey.pem

默认的,aria2 不具备读取私钥的权限,因此需要对 aria2 开放 Let’ Eencrypt 私钥文件读取权限

$ sudo chown root:aria2 /etc/letsencrypt/live /etc/letsencrypt/archive
$ sudo chmod g+x /etc/letsencrypt/archive /etc/letsencrypt/live

重启 aria2 服务

$ sudo systemctl restart aria2

Step 3. 安装 h5ai

$ vim /etc/nginx/sites-available/default

server{
 ...
    location /downloads {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        #auth_basic "Enter your name and password";
        #auth_basic_user_file /etc/nginx/.htpasswd;
    }
...
 }

从官网下载 h5ai,解压缩至 /var/www/html/_h5ai,其余配置要求参照官网。

$ sudo systemctl reload nginx

访问 https://yourdomain.com/downloads/,如果一切正常,即可看到 _h5ai 接管的目录浏览页面

Step 4. 安装 AriaNg

下载 AriaNg,解压缩至 /var/www/html/ariang 即可

$ cd /tmp
$ wget https://github.com/mayswind/AriaNg/releases/download/0.4.0/aria-ng-0.4.0.zip
$ sudo unzip aria-ng-0.4.0.zip -d /var/www/html/ariang

访问 https://yourdomain.com/ariang 并配置好 RPC,如果一切正常,即可连接至 aira2 服务

到此,完成基本的 aria2 + h5ai 搭建

安全加固

 1. Nginx 443 端口转发 RPC

通过 Nginx 443 转发 AriaNg RPC,可关闭 aria2 6800 端口外网监听,减小攻击面。

Step 1. 配置 Nginx RPC 转发

server{
...
    # redirect aria2 RPC
    location ^~ /jsonrpc {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass_header X-Transmission-Session-Id;
        add_header Front-End-Https on;
        
        # WebSocket support
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_pass https://127.0.0.1:6800/jsonrpc;
    }
...
}

$ sudo systemctl reload nginx

Step 2. 关闭 aria2 外部监听

$ sudo vim /etc/aria2.conf
rpc-listen-all=false

重新启动 aria2

$ sudo systemctl restart aria2

Step 3. 更新 AriaNg 配置

将 RPC 端口设置为 443

 2. 为下载目录增加访问控制

vim /etc/nginx/yoursite

...
location /downloads/ {
    autoindex on;
    autoindex_exact_size off;
    auth_basic "Deed Authentication";
    auth_basic_user_file /etc/nginx/htpasswd;
}

安装 apache2-utils ,用以配置 HTTP Auth 账户

sudo apt-get install apache2-utils

添加一个账户

sudo htpasswd -c /etc/nginx/.htpasswd yourusername

工具会提示你输入和确认密码。

重载 Nginx

systemctl reload nginx

这时访问 https://yourdomain.com/downloads 就需要认证了。


广告:觉得这篇文章有帮助?请使用博主的推广链接订购 Vultr VPS,使用满 $10 双方将各获得 $10 优惠。此活动永久有效。

2019 限时活动:点此链接购买 Vultr VPS,可获取 $50 优惠券。

发表评论

电子邮件可用于接收评论通知,但不会被公开。必填项已用 * 标注。