惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
宝玉的分享
宝玉的分享
V
V2EX
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
美团技术团队
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
B
Blog RSS Feed

晚花行乐

马克卡尼在2026年达沃斯论坛上的讲话(阅读材料) | 晚花行乐 鸡娃如何用力才是恰到好处 | 晚花行乐 读万卷书,行万里路的辩证关系 | 晚花行乐 反对培训机构掐尖招生 | 晚花行乐 小泽和建国会谈最后10分钟全文(阅读材料) | 晚花行乐 来看看 DeepSeek 怎么鸡娃 | 晚花行乐 谈谈基本功 | 晚花行乐 惠普 ProDesk SFF PC 各系列参数对比 | 晚花行乐 解决瘦客户机上安装 Debian 12 启动失败问题 | 晚花行乐 意拾喻言:老外写的文言文 | 晚花行乐 笠翁对韵中的典故(十三元) | 晚花行乐 谈谈中考取消四小门 | 晚花行乐 亚马逊云科技产品免费试用攻略(3) - 对象存储服务 | 晚花行乐 在 Windows 10 LTSC 版本上安装 WSL2 | 晚花行乐 Debian 12 的常用配置项 | 晚花行乐 在 Debian 12 上安装 Nvidia 显卡驱动程序 | 晚花行乐 解决 Debian 12 关机失败问题 | 晚花行乐 解决 VS Code 自动更新版本后卡在连接界面 | 晚花行乐 观看巴黎奥运会有感 | 晚花行乐 在 Windows10 上安装惠普旧打印机驱动程序 | 晚花行乐 欢迎关注公众号:晚花行乐 | 晚花行乐 如何编写拼写检查器 | 晚花行乐 亚马逊云科技产品免费试用攻略(2) - 云服务器 | 晚花行乐 Pandas 中 axis 参数的理解(附实例) | 晚花行乐 我打算命个名,叫什么什么 Manager | 晚花行乐 上海武康路历史建筑一览 | 晚花行乐 Python 实现简单的数学表达式解析并处理 | 晚花行乐 观看马拉松的感悟 | 晚花行乐 Python 保存 Cookies 到文件并再次读取 | 晚花行乐 如何为 Hugo 静态网站添加评论功能 | 晚花行乐
用 nginx 搭建文件下载服务器 | 晚花行乐
2018-03-23 · via 晚花行乐

有时候临时需要搭建一个文件服务器、提供文件目录浏览和文件下载功能,有一种比较简便的方法是使用 nginx 的 目录列表 功能,由 ngx_http_autoindex_module 提供。

概述

以 docker 形式启动 nginx,让安装、部署更加的方便,而且不会对原有系统造成影响,十分适合临时搭建的任务。

本文的大致步骤如下:

  1. 启动 nginx
  2. 准备 nginx 的配置文件
  3. 准备本地的下载目录
  4. 使用 docker 启动 nginx

启动 nginx

用docker-compose,只需将各个参数写进配置文件,就可以方便的创建并运行容器。

编辑一个名为 docker-compose.yaml 的文件,内容如下:

# docker-compose.yaml
version: '2'
services:
  nginx:
    image: nginx:1.13
    ports:
      - "8080:80" 

上面各个配置项的解释:

image

nginx镜像来源,仅仅写nginx表示从官方dockerhub下载

ports

8080:80 表示将宿主机的8080端口转发到容器内的80端口,也就是对外的8080端口提供服务,可以按需修改。冒号后面的80,需要和 nginx.conf 里的 listen 端口保持一致。默认是80

在上面yaml文件所在的目录下执行命令

$ docker-compose up -d

就能创建并启动nginx容器。用浏览器访问服务器的8080端口,如果看到下面的界面,说明 docker 和 nginx 都已经正常启动。

准备 nginx 配置文件

简单的 nginx.conf 配置文件例子如下

# nginx.conf
user root;
worker_processes 1;
events {
  worker_connections 1024;
}
http {
  server {
    listen 80;
    server_name your.domain.com;
    root /usr/share/nginx/files;
    charset utf-8;
    location / {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

上面各个配置项的解释:

server_name

服务器的域名,如果直接用IP访问,该项可以省略

root

静态文件的本地根路径,可以保持该默认值:/usr/share/nginx/files,后面会利用 docker 的特性,将本地目录映射为此路径。

charset

编码设置为 UTF-8 ,为了使中文文件名能正常显示。

autoindex

开启文件列表功能的开关,默认为off,需要明确地打开,才能启用文件列表功能。

autoindex_exact_size

默认为 on,表示列出文件实际大小,单位为字节,off 表示自动显示K,M,G等,方便查看。举个例子如下表,显示某个文件的显示方式不同:

autoindex_exact_size显示值
on1476267045
off1.4G

autoindex_localtime

列出文件的时间,默认为off,表示采用默认UTC时区,on 表示采用nginx 的系统当地时区。

autoindex_localtime显示值
on系统当地时间
offUTC时间

应用 nginx 配置文件

接下来要把 上面编辑好的 nginx.conf 应用在启动的容器里,只需要将这个文件放到 docker-compose.yaml 同一目录下,然后在 docker-compose.yaml 里加入一行 volume 设置:

# docker-compose.yaml
version: '2'
services:
  nginx:
    image: nginx:1.13
    ports:
      - "8080:80"
    volumes:
      #映射 nginx 配置文件
      - "./nginx.conf:/etc/nginx/nginx.conf"  

指定本地路径

假设你本地的根路径为:

/path/to/local/root

只需要在 docker-compose.yaml 里再加入一行 volume 设置:

# docker-compose.yaml
version: '2'
services:
  nginx:
    image: nginx:1.13
    ports:
      - "8080:80"
    volumes:
      - "./nginx.conf:/etc/nginx/nginx.conf"
      #指定本地路径
      - "/path/to/local/root:/usr/share/nginx/files" 

修改 nginx 的时区

nginx 容器默认是 UTC 时区,所以即使按照 这一节的提示 ,在 nginx.conf 里,指定了 autoindex_localtime on ,页面上仍然会显示 UTC 时间。所以需要修改 nginx 容器内的时区。

假如我们准备将时区修改为 Asia/Shanghai

在 docker-compose.yaml 里再加入一行 command 设置,可以覆盖原来的启动命令:

# docker-compose.yaml
version: '2'
services:
  nginx:
    image: nginx:1.13
    ports:
      - "8080:80"
    volumes:
      - "./nginx.conf:/etc/nginx/nginx.conf"
      - "/path/to/local/root:/usr/share/nginx/files"
    command:
      sh -c "ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone && nginx -g 'daemon off;'"

重启 nginx 容器

执行下列命令即可重启 nginx 容器

$ docker-compose up -d --force-recreate

最终效果

最终效果如下:

续:修改页面的外观

上面最终效果过于平淡,不仅白底黑字,而且访问过的链接还会变色。 nginx 第三方的模块 Fancy Index , 可以给下载页面增添一些样式。

各位读后有什么想法,请在下方留言吧!如果对本文有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

精彩评论