nginx를 사용하여 컨테이너에 업로드 및 다운로드하기 위한 파일 서버를 구축하는 방법

王林
풀어 주다: 2023-05-15 23:49:04
앞으로
1881명이 탐색했습니다.

1. nginx 컨테이너 설치

nginx가 파일 업로드를 지원하려면 nginx-upload-module 모듈을 사용하여 컨테이너를 다운로드하고 실행해야 합니다.

sudo podman pull docker.io/dimka2014/nginx-upload-with-progress-modules:latest sudo podman -d --name nginx -p 83:80 docker.io/dimka2014/nginx-upload-with-progress-modules
로그인 후 복사

이 컨테이너에는 nginx-upload-module 모듈과 nginx-upload-progress -모듈 모듈.

참고이 컨테이너는Alpine Linux이고 bash가 없으며 일부 명령이 다른 Linux 배포판과 다릅니다.Alpine Linux,没有bash,有些命令与其它发行版本的Linux不一样。

使用下面的命令进入容器:

sudo podman exec -it nginx /bin/sh
로그인 후 복사

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

apk update apk add tzdata echo "Asia/Shanghai" > /etc/timezone rm -rf /etc/localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime apk 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
로그인 후 복사
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; } }
로그인 후 복사

2. nginx 구성

구성 파일의 경로는/etc/nginx/conf.d입니다. /default.conf< /code>,

mkdir -p /tmp/nginx cd /tmp/nginx mkdir 1 2 3 4 5 6 7 8 9 0 chown nginx:root . -R
로그인 후 복사

이제 파일 서비스가 구성되었습니다. 구성을 적용하려면 다음 명령을 사용해야 합니다.

   上传 
   
로그인 후 복사

3. 파일 업로드 지원

1.

위 구성 파일 서버 구성이 완료되었으나 파일을 업로드할 수 없습니다. 파일을 업로드하려면 다음 구성을 수행해야 합니다.

apk add python3 pip3 install bottle pip3 install shutilwhich
로그인 후 복사

위 구성에서 임시 저장소는 1개를 기준으로 합니다. -업로드 디렉터리에 있어야 하는 비트 해시입니다. 0~9의 여러 디렉터리를 수동으로 만듭니다.

#!/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)
로그인 후 복사

2. upload.html을 추가합니다

# 开辟一个空间proxied来存储跟踪上传的信息1MB upload_progress proxied 1m; server { …… location ^~ /progress { # 报告上传的信息 report_uploads proxied; } location /upload { ... # 上传完成后,仍然保存上传信息5s track_uploads proxied 5s; } }
로그인 후 복사

3. 후속 처리 서비스를 추가합니다

먼저 Python과 필수 라이브러리를 설치해야 합니다.

(progress)
로그인 후 복사
nginx를 사용하여 컨테이너에 업로드 및 다운로드하기 위한 파일 서버를 구축하는 방법python 서비스 소스 코드: rrreee4. 1. 구성 수정rrreee2. 업로드 페이지 수정rrreee

위 내용은 nginx를 사용하여 컨테이너에 업로드 및 다운로드하기 위한 파일 서버를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!