用 Nginx 搭建原始文件列表(GNU 风格)
你是否曾经访问过像 https://ftp.gnu.org/gnu/ 这样的页面?它用最朴素的方式展示了一个目录下的所有文件和文件夹:只有文件名、大小、修改时间三列,没有任何多余的装饰。这就是 Nginx 的目录列表功能(autoindex)最原汁原味的呈现。
本文将带你从安装 Nginx 开始,在几分钟内搭建一个同样风格的文件列表服务,并配置 HTTPS 和专属域名。
一、Nginx 安装与模块说明
1.1 安装 Nginx
Ubuntu/Debian:
sudo apt update
sudo apt install nginx -y
CentOS/RHEL/Fedora:
# 先安装 EPEL 仓库(CentOS 需要)
sudo yum install epel-release -y
sudo yum install nginx -y
安装完成后,启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
1.2 关于模块:不需要额外安装
生成目录列表的核心模块是 ngx_http_autoindex_module,它是 Nginx 的内置模块,编译时默认自动加载,无需额外安装。
很多教程提到编译安装或动态加载模块,是针对非内置模块(如 ngx-fancyindex 美化模块)。我们使用的是 Nginx 原生功能,用包管理器安装后即可直接使用,不需要任何额外操作。
1.3 配置文件目录结构(Ubuntu/Debian)
| 目录/文件 | 说明 |
|---|---|
/etc/nginx/nginx.conf | Nginx 主配置文件 |
/etc/nginx/sites-available/ | 所有站点配置文件存放处 |
/etc/nginx/sites-enabled/ | 已启用的站点配置(软链接) |
/var/www/html/ | 默认网站根目录 |
/var/log/nginx/access.log | 访问日志 |
/var/log/nginx/error.log | 错误日志 |
二、准备文件目录
sudo mkdir -p /var/www/files
把你要分享的文件放入这个目录。root 指向该目录后,Nginx 只会展示这个目录及其子目录下的内容。
三、创建 Nginx 站点配置
配置文件命名为 ftplist,放在 /etc/nginx/sites-available/ 目录下:
sudo nano /etc/nginx/sites-available/ftplist
填入以下内容:
# HTTP 自动跳转 HTTPS
server {
listen 80;
server_name ftp.example.com; # 改成你的实际域名
return 301 https://$server_name$request_uri;
}
# HTTPS 主服务
server {
listen 443 ssl http2;
server_name ftp.example.com; # 改成你的实际域名
# SSL 证书
ssl_certificate /etc/letsencrypt/live/ftp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ftp.example.com/privkey.pem;
root /var/www/files;
location / {
autoindex on; # 开启目录列表
autoindex_exact_size on; # 精确字节数(GNU 风格)
autoindex_localtime on; # 显示服务器本地时间
}
}
各指令说明
| 指令 | 说明 | 推荐值 |
|---|---|---|
autoindex | 开启或关闭目录列表功能,默认 off | on |
autoindex_exact_size | on:精确显示文件字节数;off:显示为 KB、MB 等易读格式 | on(GNU 风格) |
autoindex_localtime | on:显示服务器本地时间;off:显示 UTC 时间 | on |
注意:如果目录下存在 index.html 文件,Nginx 会优先显示它而不是目录列表。需要删除或重命名该文件。
四、启用配置
# 创建软链接,启用站点
sudo ln -s /etc/nginx/sites-available/ftplist /etc/nginx/sites-enabled/
# 检查配置语法
sudo nginx -t
# 重载 Nginx
sudo systemctl reload nginx
五、配置 HTTPS(Let’s Encrypt)
# 安装 Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
# 获取证书并自动配置 Nginx
sudo certbot --nginx -d ftp.example.com # 改成你的实际域名
按提示操作即可。Certbot 会自动修改 Nginx 配置启用 HTTPS,并设置自动续期任务。
六、验证
访问 https://ftp.example.com(改成你的域名),你将看到类似 GNU 的原始文件列表:
Index of /
Name Last modified Size
Parent Directory -
file1.zip 2026-07-27 10:00 1234567
file2.tar.gz 2026-07-26 15:30 456789
folder/ 2026-07-25 09:00 -
和 GNU 一模一样,就是这个味儿。
七、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 访问显示 403 Forbidden | autoindex 未开启或目录权限不足 | 确认有 autoindex on;;执行 sudo chmod 755 /var/www/files |
| 页面空白或显示其他内容 | 目录下存在 index.html | 删除或重命名 index.html,或配置 index ""; |
| 中文文件名乱码 | 字符集未设置 | 在 location / 中添加 charset utf-8; |
| HTTPS 证书报错 | 证书未获取或已过期 | 执行 sudo certbot renew --dry-run 测试 |
总结
用 Nginx 搭建 GNU 风格的文件列表,核心就几步:
- 安装 Nginx:包管理器一行命令搞定,
autoindex模块内置,不需要额外安装任何东西 - 开启
autoindex on:让 Nginx 生成原始目录列表 - 配置 HTTPS:用 Let’s Encrypt 免费证书保障安全
- 绑定域名:用
ftp.example.com这样的子域名方便访问
不需要 fancyindex,不需要主题,不需要任何美化。 这就是 GNU 官网使用的方案——干净、简洁、高效。