用 nginx 搭建文件下载服务器

发表时间 ·

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

背景

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

用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;
    location / {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

上面各个配置项的解释:

  • server_name :你的域名,如果直接用IP访问,该项可以省略
  • root :静态文件的本地根路径,可以保持该默认值:/usr/share/nginx/files,后面会利用 docker 的特性,方便的重新指定路径。
  • autoindex on :开启文件列表功能的开关,默认为off,需要明确地打开,才能启用文件列表功能。
  • autoindex_exact_size :列出文件大小的单位,on 表示固定为字节单位,off 表示自动显示K,M,G等
  • autoindex_localtime :列出文件的时间,off 表示采用默认UTC时区,on 表示采用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 端口保持一致。

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

$ docker-compose up -d

就能创建并启动nginx容器。用浏览器访问服务器的8080端口,就会看到下面的界面

应用 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 , 可以给下载页面增添一些样式。


相关文章   欢迎到 留言板 写下你的看法。
  本页面内容采用 署名协议 CC-BY 授权。欢迎转载,请保留原文链接