北京华金科技

nginx作为下载服务器配置过程

2026-04-10 10:16:02 浏览次数:0
详细信息

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 下载服务器的基本配置。根据实际需求调整配置参数。

相关推荐