nginx做文件服务器

nginx做文件服务器

浏览次数:
信息来源: 用户投稿
更新日期: 2026-01-12
文章简介

为了让nginx支持文件上传,需要下载并运行带有nginx-upload-module模块的容器:sudopodmanpulldocker.io/dimka2014/nginx-upload-with

2025阿里云双十一服务器活动

为了让nginx支持文件上传,需要下载并运行带有nginx-upload-module模块的容器:

sudopodmanpulldocker.io/dimka2014/nginx-upload-with-progress-modules:latest

sudopodman-d--namenginx-p83:80docker.io/dimka2014/nginx-upload-with-progress-modules

该容器同时带有nginx-upload-module模块和nginx-upload-progress-module模块。

注意该容器是,没有bash,有些命令与其它发行版本的Linux不一样。

sudopodmanexec-itnginx/bin/sh

作为文件服务器,需要显示本地时间,默认不是本地时间。通过下面一系列命令设置为本地时间:

echo"Asia/Shanghai">/etc/timezone

cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime

apkdeltzdata

创建文件服务器的根目录:

mkdir-p/nginx/share

二、配置nginx

charsetutf-8;#设置字符编码,避免中文乱码

autoindexon;#开启索引功能

autoindex_exact_sizeoff;#关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)

autoindex_localtimeon;#显示本地时间

}

此时我们的文件服务就配置好了,需要使用下面的命令让配置生效:

nginx-sreload

三、支持文件上传

上面的配置已经完成文件服务器的配置了,但是不能上传文件,想要上传文件,还需要做如下配置:

charsetutf-8;#设置字符编码,避免中文乱码

upload_limit_rate1M;#限制上传速度最大1M

root/nginx;#upload.html所在路径

#设置后端处理交由@rename处理。由于nginx-upload-module模块在存储时并不是按上传的文件名存储的,所以需要自行改名。

#指定上传文件存放目录,1表示按1位散列,将上传文件随机存到指定目录下的0、1、2、...、8、9目录中(这些目录要手动建立)

#上传文件的访问权限,user:r表示用户只读,w表示可写

upload_store_accessuser: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_cleanup400404499500-505;

proxy_passhttp://localhost:81;

}

上面的配置中,临时存储时是按1位散列来存储的,需要在上传目录下手动创建0~9几个目录。

chownnginx:root.-R

2.添加upload.html

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<title>上传</title>

nginx做文件服务器

<formname="upload"method="POST"enctype="multipart/form-data"action="upload">

<inputtype="file"name="file"/>

<inputtype="submit"name="submit"value="上传"/>

</html>

3.添加后面的处理服务

需要先安装python及所需的库

pip3installshutilwhich

python服务源码:

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])

print("rename%sto%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无访问权限

redirect("50x.html")#如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口

redirect('/')#如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口

run(host='localhost',port=81)

四、获取上传进度

#开辟一个空间proxied来存储跟踪上传的信息1MB

upload_progressproxied1m;

#上传完成后,仍然保存上传信息5s

<formid="upload"enctype="multipart/form-data"action="/upload"method="post"onsubmit="openProgressBar();returntrue;">

<inputname="file"type="file"label="fileupload"/>

<inputtype="submit"value="UploadFile"/>

<divid="progressbar"></div>

<divid="tp">(progress)</div>

<scripttype="text/javascript">

functionopenProgressBar(){

uuid+=Math.floor(Math.random()*16).toString(16);

document.getElementById("upload").action="/upload?X-Progress-ID="+uuid;

interval=window.setInterval(function(){

varreq=newXMLHttpRequest();

req.open("GET","/progress",1);

req.setRequestHeader("X-Progress-ID",uuid);

req.onreadystatechange=function(){

varupload=eval(req.responseText);

document.getElementById('tp').innerHTML=upload.state;

if(upload.state=='done'||upload.state=='uploading'){

varbar=document.getElementById('progressbar');

varw=400*upload.received/upload.size;

if(upload.state=='done'){

window.clearTimeout(interval);

if(upload.state=='error'){

window.clearTimeout(interval);

</script>

以上就是在容器中怎么使用nginx搭建上传下载的文件服务器的详细内容,更多请关注主机测评网其它相关文章!

标签:
什么是服务器管理(服务器管理器的主要功能)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!