Skip to content

Nginx 静态资源服务器与目录浏览

Nginx 不仅是一个高性能的反向代理服务器,也非常适合作为静态资源服务器。通过 autoindex 模块,你可以快速搭建一个功能完备的文件下载站。


📂 开启目录浏览 (Download Station)

当目录下没有 index.html 时,默认会返回 403 错误。开启 autoindex 后,Nginx 会自动生成目录列表。

核心配置示例

nginx
server {
    listen 80;
    server_name download.example.com;

    location /files/ {
        root /data/share/;
        
        # 开启目录浏览
        autoindex on;
        
        # 优化显示效果
        autoindex_exact_size off; # 关闭精确字节数,显示 MB/GB
        autoindex_localtime on;    # 显示文件本地时间而非 GMT 时间
        
        # 防止中文文件名乱码
        charset utf-8,gbk;
    }
}

🛠️ 参数详解

指令默认值说明
autoindexoff是否开启目录列表生成功能。
autoindex_exact_sizeonon 时显示确切字节数;为 off 时显示友好的 KB/MB/GB。
autoindex_formathtml列表显示格式,可选 htmlxmljsonjsonp
autoindex_localtimeoff是否显示服务器本地时间,默认为 GMT 时间。

🎨 进阶技巧

1. 限制下载速度

为了防止某个用户占用过多带宽,可以配合 limit_rate 使用:

nginx
location /files/ {
    autoindex on;
    limit_rate 500k; # 限制每个连接的下载速度为 500KB/s
}

2. 安全加固 (加把锁)

目录浏览功能会暴露服务器文件结构,建议在非公开目录下添加认证,避免陌生 IP 狂刷。

Nginx 配置示例:

nginx
location /files/ {
    autoindex on;
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

生成密码文件:

你需要使用 htpasswd 工具(通常由 httpd-toolsapache2-utils 提供)来创建加密的密码文件:

bash
# 1. 安装工具
yum install httpd-tools    # CentOS
apt install apache2-utils  # Ubuntu/Debian

# 2. 生成文件并添加用户 ftp
# -c 代表 create (首次创建文件时使用),之后添加用户无需 -c
htpasswd -c /etc/nginx/.htpasswd ftp

⚠️ 注意事项

  1. 权限问题:确保 Nginx 运行用户(通常是 nginxwww-data)对共享目录有读取权限(r)和进入目录的执行权限(x)。
  2. 安全性严禁在 Web 源码根目录或包含敏感配置(如 .env)的目录下开启 autoindex
  3. 冲突:如果目录下存在 index 指令指定的文件(如 index.html),Nginx 会优先显示该文件而不会生成目录列表。

🔗 参考资料

Released under the MIT License.