读懂这篇文章,你需要:

  1. 有过一定的Nginx或类似产品的维护经验。
  2. 使用过nextcloud或类似的私有网盘系统。如果没有,可以通过阅读下方的文档了解。
  3. 了解并使用过至少一个云服务供应商的CDN服务。

相关文档:

Nginx

nextcloud

阿里云CDN

h5ai

部署后的站点展示:

VVDownloads

背景

原先的下载站真的硬核到难以直视。由于我原先直接通过在Hexo上面添加链接以提供下载。这样不仅看起来丑陋,而且维护很不方便。

前一段时间接触到了h5ai这个好东西,之前也一直在维护自己的nextcloud,于是乎,想要改造下载站的欲望一发不可收拾。

需求分析

  1. 可以使用已有的CDN服务对所提供的下载内容进行加速;
  2. 下载内容的维护应当很方便,并且可以在不同的终端进行;
  3. 下载页面应当保持美观。

关键思路

把nextcloud的数据存储路径设置为h5ai的根目录。

具体操作

初次尝试

我一开始尝试使用CDN对nextcloud直接加速,但是之后发现,这是一件极其愚蠢的事。因为nextcloud使用的是动态页面,对这样的页面进行加速可谓是难上加难。即使我只对公开分享的页面进行加速也不行。实测:使用CDN,哪怕全站都设置成立即回源,也会出现无法上传文件的情况。

搭建nextcloud

这一点我不再赘述,因为资料很多,或者直接点击我上面的链接看官方文档。

配置h5ai

h5ai这一web index展示系统的部署相当简单,只要将下载的_h5ai目录放在所需要展示的目录下即可,这个目录可以是你的nextcloud个人文件存储根目录(一般为<path to nextcloud>/data/<your user name>/files),也可以是其一个子目录:

配置Nginx

按照以下的套路来即可,注意index后面要加上/_h5ai/public/index.php

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
server {
listen 443 ssl http2;

server_name downloads.vvzero.com;

ssl on;
ssl_certificate ???; #填写证书地址
ssl_certificate_key ???; #填写证书地址

root ???;
index index.html index.php /_h5ai/public/index.php; # 关键

add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';

location / {
try_files $uri $uri/ =404;
}

# 由于h5ai需要php,所以请安装php-fpm
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}
}

server {
listen 80;

server_name downloads.vvzero.com;

rewrite ^(.*) https://downloads.vvzero.com$1 permanent;
}

配置CDN

这里以阿里云为例

  • 业务类型暂时先选“图片小文件”,因为自己分享的图片比较多。

  • 缓存过期时间:默认所有直接回源(emmm我实在没想知道哪些跟动态页面有关),权值为1;然后jpg, png, bmp, zip, rar, 7z, exe, msi, doc, docx, ppt, pptx, xls, xlsx, pdf, apk, rmvb, rm, avi, mov, mp3, mp4, flac, wav, tar, gz, iso, bin, js, css, txt, svg, ico, psd, md这些,是我整理的一部分常用文件扩展名,设置成30天缓存,权值为10。

  • 开启https并强制跳转

  • 开启HTTP2

  • 配置一下cname

  • ok

后记

现在看着舒服多了。

VVDownloads

然后还发现了,其实,这样的话,我可以在我对nextcloud上开一个公共账户,这样就可以让我的小伙伴们,使用我这套系统,假装有一个CDN啦!毕竟备案还是一件麻烦的事情呢。