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 ...
随机推荐
- 信创要求下,FTP要不要替代?要怎么进行国产化替代?
信创在国内如火如荼地发展,无论在技术探索和突破上,还是在政策规划上,都朝着更加完善的方向大步迈进.信创目前在从大的方面来说,信创目前主要集中在基础软件.硬件和芯片上,其中基础软件包括操作系统.数据库. ...
- iOS ProtocolBuffer使用介绍
ProtocolBuffer 简介 Protocol Buffer 是google 的一种数据交换的格式 Protocol Buffer 和 XML.JSON一样都是结构数据序列化的工具,但它们的数据 ...
- Docker部署Minio文件系统
MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储. 它是与 Amazon S3 云存储服务兼容的 API. 使用 MinIO 为机器学习.分析和应用程序数据工作 ...
- kafak学习总结
高可用 多副本机制: 主副本和从副本,从副本只负责同步主副本数据,只有主副本进行读写. 高并发 网络结构设计 多路复用 多selector -> 多线程-> 多队列 高性能 写 把数据先写 ...
- 第4关—input()函数
1.input()函数 input()函数是输入函数 import time print('亲爱的同学:') time.sleep(1) print('我们愉快地通知您,您已获准在霍格沃茨魔法学校就 ...
- 开启MySQL数据库远程连接
为了使其余用户/计算机能访问SQL数据库,需对SQL Server进行以下配置.有以下两种方法: 方法一:bat命令修改. 新建.txt文件,添加以下内容,保存后再修改为.bat,双击.bat文件. ...
- Ping命令的基本使用
一.Ping命令的基本使用 在网络中 ping 是一个十分强大的 TCP/IP 工具.我们通常会用它来直接 ping ip 地址,来测试网络的连通情况.它的作用主要为: 1.用来检测网络的连通情况和分 ...
- NextCloud 17.0.1 升级到NextCloud 23.0.0
NextCloud 版本过低使用时间过长,想升级一下. 问题记录及参考文档 本次采用离线升级(在线不能下载) 官网下载https://nextcloud.com/install/# 23.0.0最新 ...
- 关于MYSQL知识点复习
关于MYSQL关联查询JOIN: https://www.cnblogs.com/withscorpion/p/9454490.html
- win10 U盘重装系统
1.做好U盘 2.F7选择U盘启动,不用F2切换启动顺序 3.IQY一键安装 4.重启前拔掉U盘 5.如果重启后蓝屏显示 恢复,重新进入PE使用 windows引导恢复,再重新启动