inginx搭建文件上传下载服务器

发现了这篇blog,准备使用nginx来实现文件上传和下载的功能。下面把实现步骤记录下来,中间有很多坑。

参考文档:

https://www.cnblogs.com/lidabo/p/4171515.html (good example)

http://www.grid.net.ru/nginx/upload.en.html

https://github.com/hongzhidao/nginx-upload-module/blob/master/README.md

http://www.codeweblog.com/文件上传从tornado迁移到nginx-upload-module/

https://www.cnblogs.com/zhanchenjin/p/5076466.html (good example analysis format)

安装要求:

1. centos7.x,

2. 系统安装了必要的编译工具

3. 下载的代码都放在/root/thb

4.本次nginx用1.13.9,

构建步骤:

1、下载nginx

# cd /root/thb; wget  http://nginx.org/download/nginx-1.13.9.tar.gz  

# tar zxvf nginx-1.13.9.tar.gz

2、下载nginx upload module

下载地址: https://github.com/hongzhidao/nginx-upload-module

别用 http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz,它太老了。

把下载后的代码都要解压到  /root/thb下面。

3、下载nginx-upload-progress-module

# git clone https://github.com/masterzen/nginx-upload-progress-module.git

# mv nginx-upload-progress-module /root/thb

4. 如果安装了nginx,则要先卸载目前的版本。

  # yum remove nginx  

5. 安装必要的编译工具

# yum -y install gcc gcc-c++ autoconf automake gd gd-devel zlib zlib-devel openssl openssl-devel pcre-devel 

6、编译nginx

# cd /root/thb/nginx-1.13.9; 
./configure  --with-debug --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --add-module=/root/thb/nginx-upload-module-master --add-module=/root/thb/nginx-upload-progress-module --with-stream --with-http_image_filter_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-file-aio --with-cc-opt='-Wno-format-security -Wno-unused-but-set-variable -Wno-unused-result -D NGX_HAVE_OPENSSL_MD5_H=1 -D NGX_OPENSSL_MD5=1 -D NGX_HAVE_OPENSSL_SHA1_H=1 -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2  -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

注: 可能出现的编译错误及其解决方案.

0:编译 nginx-upload-module时候,如果出现 md5.h找不到的话,则必须确保你安装了openssl,且确保你的编译选择用了如下的选择(直接用上面的配置就OK)

-D NGX_HAVE_OPENSSL_MD5_H=1 -D NGX_OPENSSL_MD5=1 

1; 出现如下错误:./configure: error: the HTTP rewrite module requires the PCRE library.

You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library

statically from the source with nginx by using --with-pcre=<path> option.

 安装pcre注意使用高版本的, 低版本的一样会出现上面error

我使用的版本是pcre-8.38。安装过程略。安装好pcre后,再执行上面的步骤。 

 # yum install -y pcre-devel

2:出现如下错误:./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

因为HttpImageFilterModule模块需要依赖gd-devel的支持, 安装gd-devel ,命令如下:

# yum install gd-devel

7. 构建nginx

# make 

如果构建nginx出现错误:

error: no member named 'to_write' in 'ngx_http_request_body_t',在stack overflow有解决方案stackoverflow

具体原因是我们下载的nginx_upload_module-2.2.0.tar.gz不支持nginx 1.4+版本,

https://github.com/hongzhidao/nginx-upload-module这个支持最新的nginx版本

6、下载wget https://github.com/hongzhidao/nginx-upload-module/archive/master.zip

7、构建、安装nginx

  # make install

说明,上面执行完毕后,nginx会安装到 /usr/sbin/, 配置文件在 /etc/nginx下面。

如果在CentOS要以服务化来管理nginx,则还要执行下面的步骤

8. CentOS的服务化管理nginx 

# vi /lib/systemd/system/nginx.service, 内容如下。

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
# systemctl enable nginx.service
# systemctl start nginx
# systemctl status nginx

到此为止,nginx就可以运行了。下面说如何配置文件上传功能。

9、可以使用demo测试上传文件的功能了

http://www.grid.net.ru/nginx/upload.en.html

https://github.com/hongzhidao/nginx-upload-module/blob/master/README.md

10. 上传进度获取在下面的这个blog说明

https://blog.csdn.net/bigtree_3721/article/details/79879072

发布了541 篇原创文章 · 获赞 302 · 访问量 216万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览