编译 nginx-upload-module 模块
下载源码
nginx 版本和 nginx-upload-module 模块下载地址:
nginx
nginx-upload-module confiuration
nginx_upload_module-2.2.0.tar.gz
在上述页面下载的 nginx_upload_module-2.2.0 编译报如下错误:
1 | error: 'ngx_http_request_body_t' has no member named 'to_write' |
建议直接从 github 下载 master 最新的源码:https://github.com/fdintino/nginx-upload-module
编译
1 | 安装编译环境 |
编译成功后,nginx 将安装到 /opt/nginx
路径下。
配置 nginx.conf
其中关于下载和上传配置如下
1 | #user nobody; |
重命名文件
使用 Node 服务对上传后的文件进行重命名,Node.js 脚本内容如下:
1 | const http = require('http'); |
C++ 方式重命名文件:
1 | struct NginxUploadRequest |
配置下载认证
在部分情况下,我们下载时需要对用户身份进行登录认证。我们可以使用 auth_basic_user_file
指定用户名密码文件,该文件我们可以使用如下方法生成:
1 | echo -n 'admin:' >> .httppasswd |
查看生成的密码文件:
1 | # cat .httppasswd |
然后,在需要登录身份认证下载的路由处进行配置:
1 | location /download { |
最后,对配置文件正确性进行校验,并重启 Nginx
服务。
在 linux
下使用 curl
工具进行测试:
1 | curl -u admin:123456 http://10.0.204.75:9003/download/video_1593656556958.mp4 -o a.mp4 |
报文请求分析:
1 | GET /download/user_alarm_resource/xxx.tmp HTTP/1.1 |
在请求Authorization
字段使用base64
加密方式对用户名:密码
进行加密后的内容。
参考资料
Nginx upload module (v 2.2.0)
centos7 使用nginx上传文件
nginx-upload-module上传文件重命名
基于nginx的文件上传下载服务器