在容器中怎么使用nginx搭建上传下载的文件服务器
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"在容器中怎么使用nginx搭建上传下载的文件服务器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在容器中怎么使用nginx搭建上传
千家信息网最后更新 2025年11月07日在容器中怎么使用nginx搭建上传下载的文件服务器
这篇文章主要讲解了"在容器中怎么使用nginx搭建上传下载的文件服务器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在容器中怎么使用nginx搭建上传下载的文件服务器"吧!
一、安装nginx容器
为了让nginx支持文件上传,需要下载并运行带有nginx-upload-module模块的容器:
sudo podman pull docker.io/dimka2014/nginx-upload-with-progress-modules:latestsudo podman -d --name nginx -p 83:80 docker.io/dimka2014/nginx-upload-with-progress-modules
该容器同时带有nginx-upload-module模块和nginx-upload-progress-module模块。
注意该容器是Alpine Linux ,没有bash,有些命令与其它发行版本的Linux不一样。
使用下面的命令进入容器:
sudo podman exec -it nginx /bin/sh
作为文件服务器, 需要显示本地时间,默认不是本地时间。通过下面一系列命令设置为本地时间:
apk updateapk add tzdataecho "Asia/Shanghai" > /etc/timezonerm -rf /etc/localtimecp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeapk del tzdata
创建文件服务器的根目录:
mkdir -p /nginx/share
二、配置nginx
配置文件的路径为/etc/nginx/conf.d/default.conf,作为
server { …… charset utf-8; # 设置字符编码,避免中文乱码 location / { root /nginx/share; # 根目录 autoindex on; # 开启索引功能 autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb) autoindex_localtime on; # 显示本地时间 }}此时我们的文件服务就配置好了,需要使用下面的命令让配置生效:
nginx -s reload
三、支持文件上传
1. 配置nginx
上面的配置已经完成文件服务器的配置了,但是不能上传文件,想要上传文件,还需要做如下配置:
server { …… charset utf-8; # 设置字符编码,避免中文乱码 client_max_body_size 32m; upload_limit_rate 1M; # 限制上传速度最大1M # 设置upload.html页面路由 location = /upload.html { root /nginx; # upload.html所在路径 } location /upload { # 限制上传文件最大30MB upload_max_file_size 30m; # 设置后端处理交由@rename处理。由于nginx-upload-module模块在存储时并不是按上传的文件名存储的,所以需要自行改名。 upload_pass @rename; # 指定上传文件存放目录,1表示按1位散列,将上传文件随机存到指定目录下的0、1、2、...、8、9目录中(这些目录要手动建立) upload_store /tmp/nginx 1; # 上传文件的访问权限,user:r表示用户只读,w表示可写 upload_store_access user:r; # 设置传给后端处理的表单数据,包括上传的原始文件名,上传的内容类型,临时存储的路径 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_pass_form_field "^submit$|^description$"; # 设置上传文件的md5值和文件大小 upload_aggregate_form_field "${upload_field_name}_md5" "$upload_file_md5"; upload_aggregate_form_field "${upload_field_name}_size" "$upload_file_size"; # 如果出现下列错误码则删除上传的文件 upload_cleanup 400 404 499 500-505; } location @rename { # 后端处理 proxy_pass http://localhost:81; }}上面的配置中,临时存储时是按1位散列来存储的,需要在上传目录下手动创建0~9几个目录。
mkdir -p /tmp/nginx cd /tmp/nginx mkdir 1 2 3 4 5 6 7 8 9 0 chown nginx:root . -R
2. 添加upload.html
上传
3. 添加后面的处理服务
需要先安装python及所需的库
apk add python3pip3 install bottlepip3 install shutilwhich
python服务源码:
#!/usr/bin/python3# -*- coding: utf-8 -*-from bottle import *import shutil@post("/upload")def postExample(): try: dt = request.forms.dict filenames = dt.get('file.name') tmp_path = dt.get("file.tmp_path") filepaths = dt.get("file.path") count = filenames.__len__() dir = os.path.abspath(filepaths[0]) for i in range(count): print("rename %s to %s" % (tmp_path[i], os.path.join(dir, filenames[i]))) target = os.path.join(dir, filenames[i]) shutil.move(tmp_path[i], target) shutil.chown(target, "nginx", "root") # 由于shutil.move不会保持用户归属,所以需要显示修改,否则访问时会报403无访问权限 except Exception as e: print("Exception:%s" % e) redirect("50x.html") # 如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口 redirect('/') # 如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口run(host='localhost', port=81)四、获取上传进度
1.修改配置
# 开辟一个空间proxied来存储跟踪上传的信息1MBupload_progress proxied 1m;server { …… location ^~ /progress { # 报告上传的信息 report_uploads proxied; } location /upload { ... # 上传完成后,仍然保存上传信息5s track_uploads proxied 5s; }}2. 修改上传页面
(progress)
感谢各位的阅读,以上就是"在容器中怎么使用nginx搭建上传下载的文件服务器"的内容了,经过本文的学习后,相信大家对在容器中怎么使用nginx搭建上传下载的文件服务器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
文件
容器
服务
配置
服务器
目录
存储
处理
上传下载
命令
时间
模块
端口
进度
面的
信息
内容
大小
路径
学习
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发工资分析报告ppt
软件开发项目 增值税税率
网络安全入门基础
怎样做管理软件开发工程师
php数据库注册登录例子
遗孀神山四个服务器选哪个
大喇叭网络技术王俊卿
关于amd服务器有什么想法
进度网络技术
西藏网络安全宣传视频
网络安全的五个知识点
怎样租用游戏服务器
300英雄中的服务器
数据库技术在社会生活中
编程学到安卓软件开发要多久
四川什么是网络技术服务工程
信息技术及软件开发企业
数据库 表名命名规范
大兴区加工软件开发经历
网络安全知识口诀童谣
从小白到网络安全专家
甘肃网络技术服务价格表格
数据库分库分表 2n
如何有效的防止网络安全
网络安全督查方案
无线网络技术学术论文
小学生国家网络安全教育板报
江西服务器虚拟化系统云服务器
崇明区营销软件开发定制价格
硕士网络安全研究方向