文件共享成为了日常工作的重要组成部分。特别是对于那些需要快速、高效分享大文件
的人来说,拥有一个简单可靠,且易于管理的平台至关重要。
项目地址:https://github.com/droppyjs/droppy
测试环境
1 2 3 4 5 6
| uname -i
docker -v
docker-compose -v
|
Docker配置Droppy
1 2 3 4 5 6 7 8 9 10 11
| version: '3' services: droppy: container_name: droppy-fileserver image: silverwind/droppy ports: - "8989:8989" volumes: - ./files:/files - ./config:/config restart: unless-stopped
|
在这个配置中,文件将存储在当前目录下的 files
文件夹中,配置信息则保存在 config
文件夹中。
文件说明:
- files 文件夹:存储文件,所有用户共享这一文件夹
- config/db.json:存储 Droppy 的配置信息,包括用户信息、权限等
- config/config.json:存储服务启动的配置信息,包括端口、访问限制等
Nginx 配置
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
| server { listen 80; server_name fileshare.local.codejerry.cn; location / { proxy_pass http://127.0.0.1:8989; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_http_version 1.1; proxy_cache off; proxy_buffering off; proxy_redirect off; proxy_request_buffering off; proxy_ignore_client_abort on; proxy_connect_timeout 7200; proxy_read_timeout 7200; proxy_send_timeout 7200; client_max_body_size 0; } }
server { listen 443 ssl; server_name fileshare.local.codejerry.cn; ssl_certificate /etc/letsencrypt/live/local.codejerry.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/local.codejerry.cn/privkey.pem; location / { proxy_pass http://127.0.0.1:8989; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_http_version 1.1; proxy_cache off; proxy_buffering off; proxy_redirect off; proxy_request_buffering off; proxy_ignore_client_abort on; proxy_connect_timeout 7200; proxy_read_timeout 7200; proxy_send_timeout 7200; client_max_body_size 0; } }
|
参数说明:
请求头设置:
- proxy_set_header Host $host;:将请求头中的 Host 字段设置为客户端请求的 Host
- proxy_set_header Upgrade $http_upgrade;:这个指令对于 WebSocket 支持是必须的。如果 Droppy 使用了 WebSocket,这将确保升级请求被正确传递
- proxy_set_header Connection $http_connection;:传递正确的 Connection 头,这对于一些特殊协议(如 WebSocket)的连接是必需的
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:将用户的真实 IP 地址传递给 Droppy,这在日志和一些网络策略中非常有用
- proxy_set_header X-Forwarded-Proto $scheme;:传递原始请求的协议(如 http 或 https)
- proxy_set_header X-Real-IP $remote_addr; 和 proxy_set_header X-Real-Port $remote_port;:分别传递用户的 IP 地址和端口
其他设置:
- proxy_http_version 1.1;:设置 HTTP 协议版本为 1.1
- proxy_cache off;、proxy_buffering off;、proxy_request_buffering off;:这些指令禁用了代理层面的缓存和缓冲,有助于减少内存使用,并允许大文件流式传输
- proxy_redirect off;:禁用代理重定向,避免修改后端服务器的重定向
- proxy_ignore_client_abort on;:即使客户端中断连接,也会继续向后端 Droppy 服务器发送请求
- proxy_connect_timeout 7200;、proxy_read_timeout 7200;、proxy_send_timeout 7200;:设置连接、读取和发送超时时间,这里设置为 7200 秒,以便支持长时间连接
- client_max_body_size 0;:这里设置为 0,表示取消上传文件大小的限制
ssl证书的获取可以参考 Lets-Encrypt配置泛域名证书
使用
浏览器输入fileshare.local.codejerry.cn
访问droppy。首次访问,输入用户名和密码即可,默认为管理员账号。登录后可以新增用户,新用户给普通权限就行,新用户就可以通过这个账号和密码传文件了。