1. 安装 Nginx
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
2. 基础下载服务器配置
创建配置文件 /etc/nginx/conf.d/download.conf:
server {
listen 80;
server_name downloads.example.com; # 修改为你的域名或IP
# 下载目录路径
root /var/www/downloads;
# 关闭目录列表(可选,开启后可浏览文件)
autoindex off;
# 如果希望开启目录浏览,使用以下配置:
# autoindex on;
# autoindex_exact_size off; # 显示文件大小(K/M/G)
# autoindex_localtime on; # 显示本地时间
# 设置字符集
charset utf-8;
# 日志配置
access_log /var/log/nginx/download.access.log;
error_log /var/log/nginx/download.error.log;
# 文件下载优化
location / {
# 禁用缓存,确保总是获取最新文件
add_header Cache-Control 'no-cache, no-store, must-revalidate';
add_header Pragma 'no-cache';
add_header Expires '0';
# 限制访问(可选)
# allow 192.168.1.0/24;
# deny all;
# 设置默认下载文件名
if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|exe|msi|apk)$) {
add_header Content-Disposition 'attachment';
}
}
# 限制文件大小(可选)
client_max_body_size 10G;
# 下载限速(可选)
location /large-files/ {
limit_rate 1m; # 限制下载速度为1MB/s
}
# 保护特定文件(如README.md)
location ~* \.(md|txt)$ {
internal;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
3. 安全增强配置
# 在server块中添加以下内容
# 禁用不必要的HTTP方法
if ($request_method !~ ^(GET|HEAD)$ ) {
return 405;
}
# 防止目录遍历攻击
location ~ \.(php|asp|aspx|jsp|cgi)$ {
deny all;
}
# 防盗链配置(可选)
location ~ \.(zip|rar|tar|gz|7z|exe|msi|apk|dmg)$ {
valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
return 403;
# 或者重定向到错误页面
# rewrite ^/.*$ http://example.com/403.html;
}
}
# 设置下载文件类型头
location ~* \.(zip|rar|tar|gz|bz2|7z)$ {
add_header Content-Type application/octet-stream;
}
location ~* \.(mp4|avi|mkv)$ {
add_header Content-Type video/mp4;
}
location ~* \.(pdf)$ {
add_header Content-Type application/pdf;
}
4. 创建下载目录并设置权限
# 创建下载目录
sudo mkdir -p /var/www/downloads
# 创建示例文件
sudo touch /var/www/downloads/example.zip
sudo touch /var/www/downloads/example.pdf
# 设置目录权限
sudo chown -R www-data:www-data /var/www/downloads # Ubuntu/Debian
# 或
sudo chown -R nginx:nginx /var/www/downloads # CentOS/RHEL
sudo chmod -R 755 /var/www/downloads
5. 启用密码保护(可选)
5.1 创建用户密码文件
# 安装htpasswd工具
sudo apt install apache2-utils # Ubuntu/Debian
# 或
sudo yum install httpd-tools # CentOS/RHEL
# 创建密码文件
sudo htpasswd -c /etc/nginx/.htpasswd username
# 输入密码后确认
5.2 在Nginx配置中添加认证
location / {
# 基本认证
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
# 或者使用更安全的认证方式
# auth_basic "Restricted Access";
# auth_basic_user_file /etc/nginx/.htpasswd;
}
6. 配置SSL/TLS(HTTPS支持)
# 使用Let's Encrypt获取证书(推荐)
sudo apt install certbot python3-certbot-nginx # Ubuntu/Debian
sudo certbot --nginx -d downloads.example.com
# 手动配置SSL
在Nginx配置中添加:
server {
listen 443 ssl http2;
server_name downloads.example.com;
ssl_certificate /etc/letsencrypt/live/downloads.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/downloads.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 其他配置与HTTP版本相同
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name downloads.example.com;
return 301 https://$server_name$request_uri;
}
7. 测试并重载配置
# 测试配置文件语法
sudo nginx -t
# 如果测试成功,重载配置
sudo nginx -s reload
# 或
sudo systemctl reload nginx
8. 防火墙配置
# 开放80和443端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
9. 监控和维护
查看下载日志:
# 实时查看访问日志
sudo tail -f /var/log/nginx/download.access.log
# 统计下载次数
sudo awk '{print $7}' /var/log/nginx/download.access.log | sort | uniq -c | sort -rn
定期清理日志(可选):
# 编辑logrotate配置
sudo nano /etc/logrotate.d/nginx
常用功能示例
按用户限速:
# 在http块中定义限速区
http {
limit_rate_zone $binary_remote_addr zone=download:10m rate=1m;
server {
location / {
limit_rate_zone download;
limit_rate 1m; # 默认1MB/s
}
}
}
分时间段限速:
# 工作日工作时间限速
location / {
set $slow 0;
if ($time_local ~ "^Mon|Tue|Wed|Thu|Fri") {
if ($time_hour >= 9 && $time_hour < 18) {
set $slow 1;
}
}
if ($slow = 1) {
limit_rate 500k; # 工作时间限速500KB/s
}
}
这样就完成了 Nginx 下载服务器的基本配置。根据实际需求调整配置参数。