使用nginx搭建文件下载服务器

August 4, 2024 by diss

前言:估计很多喜欢折腾的朋友手里都有不少vps和域名,只是可惜的是,好多都拿来吃灰了。vps有一个比较大的优势就是:地处机房,网络带宽足,我们完全可以利用这点下(合规)bt/种子资源,然后服务端安装相应的媒体服务器比如plexjellyfin来使用它,我们甚至可以用caddy或者nginx网页端在线看下好的视频,扯远了......

本文介绍一种方法,让你的vps派上用场,你可以拿它做文件共享。具体实现目标是:让你可以通过访问https://example.com来访问相应目录下的文件,可查看可下载,并且你可以给这个访问设置一个访问验证。

准备条件:

  • 一个域名,证书可使用Cloudflare提供的
  • 一台有公网IP的VPS服务器
  • 一台方便操作的本地电脑

一、获取/etc/nginx压缩包

执行下面命令前,你需要先安装好docker,这里不再赘述安装方法:

# 拉取nginx镜像
docker pull nginx:stable

# 先创建一个nginx容器,选/root/nginx为映射目录
docker run -d \
    --name nginx \
    --net host \
    -v /root/nginx:/root/nginx \
    nginx:stable

# 进入容器,执行操作
docker exec -it nginx bash

# 切换到/etc/目录,将/etc/nginx打包,并拷贝到/root/nginx目录下
cd /etc/ && tar -zcf nginx.tar.gz ./nginx/ && cp nginx.tar.gz /root/nginx/

#退出容器(回到宿主机shell环境)
exit

# 移除容器
docker rm -f nginx

二、创建密钥文本文件

上面移除容器后,宿主机/root/nginx目录下仍然存在nginx.tar.gz的压缩包,下面进行解压,并进行一系列相关操作:

# 将压缩包解压到/etc/目录下
tar -zxf /root/nginx/nginx.tar.gz -C /etc/

# 切换路径
cd /etc/nginx/conf.d

# 利用nginx内置的openssl创建标准密文
docker run --rm nginx:stable openssl passwd -crypt password
# 假设下面是命令结束输出的密文,那么这意味着当你使用admin:9nL8bmgcoY5HY 作为密钥文本内容时,
# 你的nginx登录用户名和密码分别是admin和password,实际密码以加密的形式存在了服务端文本中
9nL8bmgcoY5HY

# 创建密钥文本
echo admin:9nL8bmgcoY5HY > ./httppasswd

三、修改default.conf文件

本文默认不修改/etc/nginx/nginx.conf主配置文件,只在/etc/nginx/conf.d目录下进行相关操作:

# 重命名
mv ./default.conf ./default.conf.bak

# 创建目录
mkdir html log

# vim site.conf
//下面是配置文件样例
server {
    listen 80;
    server_name example.com; # 这里输入你的域名

    location / {
        return 301 https://example.com$request_uri; # 将http重定向到https
    }
}

server {
    listen 443 ssl;
    server_name example.com; # 这里填域名
    access_log /etc/nginx/conf.d/log/access.log;
    error_log /etc/nginx/conf.d/log/error.log;

    ssl_certificate /etc/nginx/conf.d/cf.crt; #把证书和key重命名后放到此目录下
    ssl_certificate_key /etc/nginx/conf.d/cf.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    location / {
        root /etc/nginx/conf.d/html;
        index index.html index.htm;
        autoindex on; # 开启索引
        autoindex_exact_size off; # 不显示确切大小
        autoindex_localtime on;
        auth_basic 'Restricted';
        auth_basic_user_file /etc/nginx/conf.d/httppasswd;# 这里指定上面一步生成的密钥文本
    }
}
//上面是配置文件样例

四、创建容器

vim run_nginx.sh

//下面是样例
#!/bin/bash
docker run -d \
    --name nginx \
    --restart always \
    --net host \
    -v /etc/nginx:/etc/nginx \
    nginx:stable
//上面是样例

# 执行此文件,每次需要重新建容器,执行此命令即可
bash run_nginx.sh

参考链接

添加新评论