插件窝 干货文章 在容器中怎么使用nginx搭建上传下载的文件服务器

在容器中怎么使用nginx搭建上传下载的文件服务器

Nginx upload 文件 server 593    来源:    2025-04-24

使用Nginx在容器中搭建文件服务器

在容器环境中使用Nginx搭建文件服务器是一个高效且轻量级的解决方案。以下是详细步骤:

1. 创建文件服务器目录结构

首先,在宿主机上创建用于存储文件的目录结构:

mkdir -p ~/file-server/{uploads,downloads}
chmod -R 777 ~/file-server  # 确保Nginx有权限访问

2. 编写Nginx配置文件

创建nginx.conf文件:

user  nginx;
worker_processes  auto;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        # 文件上传配置
        location /upload {
            client_max_body_size 100M;  # 设置最大上传文件大小
            upload_pass   @upload_endpoint;
            upload_store /usr/share/nginx/uploads;
            upload_store_access user:rw group:rw all:rw;
            upload_set_form_field $upload_field_name.name "$upload_file_name";
            upload_set_form_field $upload_field_name.content_type "$upload_content_type";
            upload_set_form_field $upload_field_name.path "$upload_tmp_path";
            upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";
            upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
            upload_pass_form_field "^submit$|^description$";
            upload_cleanup 400 404 499 500-505;
        }

        location @upload_endpoint {
            return 200 "Upload successful: $upload_file_name";
        }

        # 文件下载配置
        location /downloads {
            alias /usr/share/nginx/downloads;
            autoindex on;  # 启用目录列表
            autoindex_exact_size off;  # 显示文件大小(KB/MB)
            autoindex_localtime on;  # 使用本地时间
        }

        # 首页
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
}

3. 创建Dockerfile

FROM nginx:alpine

# 创建必要的目录
RUN mkdir -p /usr/share/nginx/uploads \
    && mkdir -p /usr/share/nginx/downloads \
    && chown -R nginx:nginx /usr/share/nginx

# 复制配置文件
COPY nginx.conf /etc/nginx/nginx.conf

# 暴露端口
EXPOSE 80

4. 构建并运行容器

# 构建镜像
docker build -t nginx-file-server .

# 运行容器
docker run -d \
  --name file-server \
  -p 8080:80 \
  -v ~/file-server/uploads:/usr/share/nginx/uploads \
  -v ~/file-server/downloads:/usr/share/nginx/downloads \
  nginx-file-server

5. 测试文件服务器

上传文件测试

使用curl上传文件:

curl -F "file=@/path/to/your/file.txt" http://localhost:8080/upload

下载文件测试

  1. 将文件放入~/file-server/downloads目录
  2. 通过浏览器访问:http://localhost:8080/downloads

6. 高级配置选项

添加基本认证

修改nginx.conf,在server块中添加:

location /downloads {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    # 其他配置...
}

然后在Dockerfile中添加:

RUN apk add --no-cache openssl \
    && printf "username:$(openssl passwd -crypt password)\n" > /etc/nginx/.htpasswd

启用HTTPS

  1. 准备SSL证书
  2. 修改nginx.conf添加SSL配置
  3. 映射证书文件到容器中

7. 使用Docker Compose

创建docker-compose.yml文件:

version: '3'

services:
  file-server:
    image: nginx-file-server
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./file-server/uploads:/usr/share/nginx/uploads
      - ./file-server/downloads:/usr/share/nginx/downloads
    restart: unless-stopped

然后运行:

docker-compose up -d

注意事项

  1. 生产环境中应考虑安全性,如限制IP访问、设置适当权限
  2. 大文件上传可能需要调整Nginx的client_max_body_size和超时设置
  3. 对于高并发场景,可能需要优化Nginx工作进程和连接数
  4. 定期清理上传目录,避免存储空间耗尽

通过以上步骤,您可以在容器中快速搭建一个功能完整的Nginx文件服务器,支持文件上传和下载功能。