Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

王林
王林ke hadapan
2023-05-15 23:49:041988semak imbas

1. Pasang bekas nginx

Untuk nginx menyokong muat naik fail, anda perlu memuat turun dan menjalankan bekas dengan modul 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

Bekas turut disertakan dengan modul nginx- upload-module dan modul nginx-upload-progress-modul.

NotaBekasnya ialah Alpine Linux, tiada bash dan beberapa arahan berbeza daripada pengedaran Linux yang lain.

Gunakan arahan berikut untuk memasuki bekas:

sudo podman exec -it nginx /bin/sh

Sebagai pelayan fail, ia perlu memaparkan waktu tempatan, yang bukan waktu tempatan secara lalai. Tetapkan waktu tempatan melalui siri arahan berikut:

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

Buat direktori akar pelayan fail:

mkdir -p /nginx/share

2. Konfigurasikan nginx

Laluan fail konfigurasi ialah /etc/nginx/conf.d/default.conf, Memandangkan

server {
    ……
    charset utf-8; # 设置字符编码,避免中文乱码
    location / {
            root   /nginx/share; # 根目录
            autoindex   on;  # 开启索引功能
            autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
            autoindex_localtime on; # 显示本地时间
        }
}

perkhidmatan fail kami kini dikonfigurasikan Anda perlu menggunakan arahan berikut untuk membuat konfigurasi berkuat kuasa:

nginx -s reload

Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

3. Sokongan muat naik fail

1. Konfigurasikan nginx

Konfigurasi di atas telah menyelesaikan konfigurasi pelayan fail, tetapi fail tidak boleh dimuat naik Jika anda ingin memuat naik fail, anda perlu membuat konfigurasi berikut:

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;
    }
}

di atas Dalam konfigurasi, storan sementara adalah berdasarkan cincangan 1-bit dan anda perlu mencipta beberapa direktori 0~9 secara manual dalam direktori muat naik.

 mkdir -p /tmp/nginx
 cd /tmp/nginx
 mkdir 1 2 3 4 5 6 7 8 9 0
 chown nginx:root . -R

2. Tambah muat naik.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>上传</title>
</head>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form name="upload" method="POST" enctype="multipart/form-data" action="upload">
<input type="file" name="file"/>
<input type="submit" name="submit" value="上传"/>
</form>
</body>
</html>

3 Tambah perkhidmatan pemprosesan seterusnya

Anda perlu memasang python dan perpustakaan yang diperlukan terlebih dahulu

apk add python3
pip3 install bottle
pip3 install shutilwhich

python. Kod sumber perkhidmatan:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from bottle import *
import shutil

@post("/upload")
def postExample():
    try:
        dt = request.forms.dict
        filenames = dt.get(&#39;file.name&#39;)
        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(&#39;/&#39;) # 如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口

run(host=&#39;localhost&#39;, port=81)

4 Dapatkan kemajuan muat naik

1 Ubah suai konfigurasi

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

2. Ubah suai halaman muat naik

rreee

Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

Atas ialah kandungan terperinci Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam