nginx文件上传模块 nginx_upload_module
1、编译安装nginx
wget https://github.com/fdintino/nginx-upload-module/archive/refs/heads/master.zip
PS:原先使用的nginx-upload-module-2.2编译的时候报错:ngx_http_upload_module.c:14:17: fatal error: md5.h: No such file or directory
# yum -y install openssl libssl-dev gcc gcc-c++ make
# cd /data
# unzip nginx-upload-module-master.zip
# cd nginx-1.19.9/
# ./configure --prefix=/data/nginx --add-module=../nginx-upload-module-master --with-http_secure_link_module
# make && make install
2、编辑nginx配置文件
vim conf/nginx.conf
#user nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; server {
listen 80;
client_max_body_size 100m;
location / {
root html;
index index.html index.htm;
}
error_page 405 =200 @405;
# Upload form should be submitted to this location
location /upload { if ($request_method = 'GET'){
root html;
}
if ($request_method = 'POST'){ # Pass altered request body to this location upload_pass @test; # Store files to this directory
# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
#文件存储的路径,要先手动创建0 1 2 3 4 5 6 7 8 9一共10个文件夹
upload_store /data/nginx/html/upload 1; # Allow uploaded files to be read only by user
upload_store_access user:rw; # Set specified fields in request body
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; # Inform backend about hash and size of a file
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;
}
}
# Pass altered request body to a backend location @test {
#content_by_lua ngx.say("upload success!");
proxy_pass http://localhost:8888;
return 200;
} }
}
使用 nginx -t 检测一下配置文件是否正确
我这里遇到一个问题 如果不使用 if 判断 开启uoload_pass @test 的话直接访问页面会报405
创建存储目录和访问的index首页
# mkdir -p html/upload/{0..9}
vim html/upload/index.html
<html>
<head>
<title>Test upload</title>
</head>
<body>
<h2>Select files to upload</h2>
<form enctype="multipart/form-data" action="/upload" method="post">
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="file" name="file3"><br>
<input type="file" name="file4"><br>
<input type="file" name="file5"><br>
<input type="file" name="file6"><br>
<input type="submit" name="submit" value="Upload">
<input type="hidden" name="test" value="value">
</form>
</body>
</html>
3、启动nginx
./sbin/nginx
4、浏览器访问 http://192.168.53.100/upload/,结果如下

5、上传文件测试

可以看到选中文件点upload 的时候报出了503,需要修改一下存储目录权限
# chmod 777 {0..9}
[root@localhost upload]# ll
total 4
drwxrwxrwx. 2 root root 6 Mar 14 00:07 0
drwxrwxrwx. 2 root root 6 Mar 14 00:07 1
drwxrwxrwx. 2 root root 6 Mar 14 00:07 2
drwxrwxrwx. 2 root root 6 Mar 14 00:07 3
drwxrwxrwx. 2 root root 6 Mar 15 00:56 4
drwxrwxrwx. 2 root root 6 Mar 15 00:56 5
drwxrwxrwx. 2 root root 6 Mar 14 00:07 6
drwxrwxrwx. 2 root root 6 Mar 14 00:07 7
drwxrwxrwx. 2 root root 6 Mar 14 00:07 8
drwxrwxrwx. 2 root root 6 Mar 14 00:07 9
-rw-r--r--. 1 root root 501 Mar 14 00:14 index.html
重新上传试试 上传成功

我们去服务器查看文件存储位置

6、添加账号登录验证
使用 htpasswd 生成用户密码
# htpasswd -c conf/htpasswd test1
New password:
Re-type new password:
Adding password for user test1
编辑nginx.conf配置文件,在upload下添加
auth_basic 'upload balance file';
auth_basic_user_file htpasswd;
重启nginx,浏览器访问

可以看到现在登录页面需要账号密码验证,使用自己创建的账号密码登录即可

7、服务器使用curl 进行文件上传调试
# curl -v -u 'test1:test1' -F file1=@1.txt -H "Content-Type:multipart/form-data" -H "Content-Disposition:attachment;filename=1.txt" -X POST http://localhost/upload

8、编写文件上传脚本
nginx文件上传模块 nginx_upload_module的更多相关文章
- nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。
ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : . ...
- 解决nginx上传模块nginx_upload_module传递GET参数
解决nginx上传模块nginx_upload_module传递GET参数的方法总结 最近用户反映我们的系统只能上传50M大小的文件, 希望能够支持上传更大的文件. 很显然PHP无法轻易实现大文件上传 ...
- 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
在基于SqlSugar的开发框架的服务层中处理文件上传的时候,我们一般有两种处理方式,一种是常规的把文件存储在本地文件系统中,一种是通过FTP方式存储到指定的FTP服务器上.这种处理应该由程序进行配置 ...
- Nginx文件上传下载实现与文件管理
1.Nginx 上传 Nginx 依赖包下载 # wget http://www.nginx.org/download/nginx-1.2.2.tar.gzinx # wget http://www. ...
- UEditor独立图片、文件上传模块
百度的UEditor编辑器的强大之处不用多说,但是有时候我们只想用他的文件.图片上传模块,不想把这个编辑器加载出来,话不多说,直接上实现代码: 引用文件: <script src="~ ...
- PHP和Nginx 文件上传大小限制问题解决方法
对于nginx+php的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,一个是php.ini文件中默认了多个地方的设置. 所以为了解决上传文件大小限 ...
- nginx上传模块nginx_upload_module使用
1.安装模块 1 cd /data/software 2 wget http://www.grid.net.ru/nginx/download/nginx_upload_module-2.0.12.t ...
- express 4.x 文件上传
1.安装文件上传模块: npm install multiparty --save 2.在routes/index.js 中添加: // 引用模块 let multiparty = require(& ...
- 源码解读-文件上传angularFileUpload1
angular-file-upload 1.文件上传模块的引入就不赘述,简单准备 2.初始化组件并绑定change事件 3.监听用户选择文件FileItem(change事件),push进文件数组qu ...
- 使用百度webuploader实现大文件上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
随机推荐
- 2.13python基础知识
编程语言的发展史 1.机器语言:内部用0和1表示 2.汇编语言:简单的字母表示二进制 3.高级语言:人类可以理解的 1.执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 2. ...
- 分析网络工具 Wireshark与tcpdump
一.安装使用 1. 安装 2. 选择网卡:我们的主机就是通过其中一块网卡和其他主机进行数据交互: 3. 点击开始:打开wireshark,点击左上角那个蓝色的鲨鱼鳍按钮,开始捕获新的分组并清空之前的分 ...
- nvm安装及使用(windon/mac)
有必要说一下nvm,因为大家做前端对node都很熟悉吧.前端的很多项目中都依赖node,还有可能每个项目依赖的node版本不一样,这样我们就上了nvm. nvm 是node Version Manag ...
- echars中国地图
vue中使用echars做出中国地图 这里只是个小demo,根据流程操作可以实现基础的中国地图,样式等后面根据需要自己去调 1.下载中国地图 echars官网示例中,没有中国地图的json,需要自己去 ...
- JavaScript基本知识整理(基本包装类型)
基本包装类型 为了方便地操作基本类型变量,ECMAScript规定了3个特殊引用类型分别是Boolean,Number和String. 这三种特殊引用类型同时具有基本类型和引用类型的功能,当我们读取一 ...
- vue+vant-ui小程序,微信小程序自定义导航栏(适配刘海屏)
整理一下微信小程序自定义导航栏和刘海屏适配问题 1.首先在根据官方文档,我们在小程序修改 app.json 中的 window 的属性 "navigationStyle": &qu ...
- CamstarVP提交前验证
方法一: public override FormsFramework.ValidationStatus ValidateInputData(Service serviceData) { Valida ...
- OCR接口
OCR基础框 import pytesseract from PIL import Image img = Image.open('实际数据1.jpeg') #具体位置截图 image1 = Imag ...
- Elasticsearch Java client使用
前言 Elasticsearch官方列出了好几个客户端,如下所示 Java Client Java Rest Client(Java High Level REST Client) Java Tran ...
- Wix打包升级包
前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我们有必要了解下Windows Installe ...