当前位置: 首页 > news >正文

nginx-file-server

使用 Nginx 构建安全可控的文件下载服务器

摘要:本文介绍如何使用 Nginx + HTTPS + Basic Auth 构建一套轻量、安全、可扩展的文件下载服务器,替代传统 FTP,支持多用户目录隔离与加密访问。

一、背景与需求

传统的 FTP 协议已逐渐被弃用,现代浏览器不再支持 ftp:// 访问方式。
如果你想在公网提供文件下载服务(如科研数据、日志、镜像等),可以使用 Nginx 构建一个 HTTPS 文件下载服务器。

目标:

  • 文件大(1GB+)可断点续传;
  • 用户访问受控;
  • 超级用户可查看所有目录;
  • 部署与扩展简单。

二、系统架构

模块功能说明
Nginx文件目录索引与下载
HTTPS加密传输
Basic Auth简易身份认证
Per-directory ACL用户仅能访问同名目录

三、目录结构

/data/downloads/
├── beijing/
├── henan/
├── shanxi/
├── shanghai/
└── shandong/

四、用户认证

yum install -y httpd-tools
mkdir -p /etc/nginx/passwd
htpasswd -c /etc/nginx/passwd/users.htpasswd beijing
htpasswd /etc/nginx/passwd/users.htpasswd henan
htpasswd /etc/nginx/passwd/users.htpasswd admin

五、生成 HTTPS 自签证书

mkdir -p /etc/nginx/certs
openssl req -x509 -nodes -days 365   -newkey rsa:2048   -keyout /etc/nginx/certs/self.key   -out /etc/nginx/certs/self.crt   -subj "/C=CN/ST=Henan/L=Zhengzhou/O=Personal/OU=Dev/CN=files.example.com"

六、Nginx 配置文件(核心)

server {listen 443 ssl;http2 on;server_name files.example.com;ssl_certificate     /etc/nginx/certs/self.crt;ssl_certificate_key /etc/nginx/certs/self.key;root /data/downloads;auth_basic_user_file /etc/nginx/passwd/users.htpasswd;location ~ ^/(?!relogin(?:/|$))[^/]+(?:/|$) {auth_basic "dir:$req_user";if ($deny_after_auth) {add_header WWW-Authenticate 'Basic realm="dir:$req_user", charset="UTF-8"' always;return 401;}autoindex on;add_header Accept-Ranges bytes;sendfile on; aio threads; directio 8m; tcp_nopush on;}location = / {if ($is_super = 0) { return 403; }autoindex on;}location ^~ /relogin {auth_basic off;default_type text/plain;add_header WWW-Authenticate 'Basic realm="Relogin", charset="UTF-8"' always;return 401;}location / { return 404; }
}

七、权限控制映射(00-auth-maps.conf

map $uri $req_user {default "";~^/([^/]+)(?:/|$) $1;
}map $remote_user $is_authed {"" 0;default 1;
}map "$remote_user:$req_user" $self_match {~^([^:]+):$ 1;default 0;
}map $remote_user $is_super {default 0;admin 1;root 1;
}map "$is_authed:$self_match:$is_super" $deny_after_auth {~^0:.*:.*$ 0;~^1:1:.*$ 0;~^1:.*:1$ 0;default 1;
}

八、测试与验证

nginx -t && nginx -s reload
curl -I https://files.example.com/beijing/
curl -I -u beijing:密码 https://files.example.com/beijing/
curl -I -u henan:密码 https://files.example.com/beijing/

九、最终效果

✅ 支持大文件下载
✅ 支持目录索引
✅ 各用户仅能访问自目录
/relogin 可强制切换账号

http://www.dtcms.com/a/613689.html

相关文章:

  • 18.PHP基础-递归递推算法
  • 郑州软件开发公司网站广西医院的网站建设
  • 费县做网站职业教育专业建设验收网站
  • 第五章 防火墙设备互联
  • 建导航网站seo企业优化顾问
  • 2025.11.15 力扣每日一题
  • LeetCode算法日记 - Day 104: 通配符匹配
  • RDMA内存保护概念---MR,PD
  • 11月13号作业
  • 怎样建立网站目录结构炒股网站开发
  • 【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (上)
  • 东莞企业建站平台中企动力 做网站 怎么样
  • 虚拟机的未来:从云计算到量子模拟
  • 前端响应式设计资源,框架+模板
  • 品牌网站建设服务网络品牌塑造
  • C语言编译系统 | 高效编译与优化技术分析
  • L2层差错控制与HARQ协议介绍
  • 4. Qt深入 线程和QObject
  • 印尼游戏出海合规指南:法律框架、税务政策与运营挑战
  • 【Java Web学习 | 第11篇】JavaScript(5)BOM
  • 打造您专属的高效DNS解析器:RethinkDNS
  • 网上书店网站建设方案策划如何建设好一个网站
  • Spring Framework 中文官方文档
  • 深度剖析 C++ vector的底层实现
  • USDe:站在稳定币、永续化与资产代币化三大趋势交汇点的新型美元
  • SpringBoot 2.x 升级到 3.x 时 Swagger 迁移完整指南
  • 网站首页浮动窗口代码忘记了wordpress登录密码忘记
  • springMVC(3)学习
  • 负载均衡API测试
  • 门户类网站费用淘宝网站边上的导航栏怎么做