Nginx和nginx-upload-module安装

Nginx用于提供高性能的web服务和反向代理服务,支持Linux和Windows。靖哥哥也是刚开始接触Nginx,这里主要记录一下Nginx环境搭建的爬坑过程。

使用nginx之前,你需要对基本的TCP/IP、HTTP协议、HTML有所了解,对Linux操作也要有一定的认识。当然,既然你搜到了这篇文章(靖哥哥的初wen),相信这些知识对你来讲已经不陌生。


第一章:Window下初识Nginx

如果你是初次接触Nginx,那么建议先体验其Windows版本,掌握Nginx的基本配置和日志切割功能。

Nginx下载地址:nginx: download

建议选择稳定版,带Windows字样的就是目标文件了。

下载以后是一个.zip的压缩包,解压。

nginx是以多进程的方式来工作的。nginx在启动后,会有一个master进程和多个worker进程。

运行根目录下的nginx.exe,控制台一闪而过,就会拉起nginx的master进程和worker进程。

此时,浏览器下输入localhost,即会进入nginx的index.html页面。

这是因为nginx的配置nginx.conf中默认开启的服务监听了设备的80端口,并且在访问本机80端口时,会返回html目录下的index.html。对于服务搭建,最需要了解清楚的就是nginx.conf,网上查一查资料,很多,讲得也比靖哥哥专业,这里我就不在Ctrl+c Ctrl+v了。

快速关闭Nginx服务,cmd:nginx -s stop 


第二章:Linux搭建Nginx环境

高性能的服务通常都是搭建在Linux环境下,安全性也会更高。但是Linux操作复杂,环境搭建耗时。所以这里直入正题,告诉朋友们要做什么,至于为什么要这么做,终归是环境问题。

其实Linux下仅仅是Nginx的环境搭建的话,并不复杂。我这里主要讲如何手动安装,为后一章的ngx_http_upload_module安装做铺垫。

我使用的是Ubuntu16的CVM,先说Nginx的安装:

Nginx的功能是不同的模块组成,其中部分模块会使用pcre、zlib、OpenSSL等三方库,所以要先安装这些库。

开搞之前,最好先获取root权限:su root,然后更新下apt-get的源:

sudo apt-get update

最后建立一个文件夹/data/youname/,并cd到对应目录下。

第一步:安装PCRE的库,PCRE库支持正则匹配,另外nginx rewrite规则依赖于正则匹配。

PCRE库的地址:https://ftp.pcre.org/pub/pcre/

在线安装:

sudo apt-get install libpcre3 libpcre3-dev

——dev是指develop,libpcre3-dev用于PCRE二次开发,这也是编译Nginx所必须使用的。

第二步:安装zlib库,zlib库用于对HTTP包的数据做gzip格式的压缩以减少数据量,当nginx.conf中配置了gzip on时,必须使用zlib。

Git:https://github.com/madler/zlib

在线安装zlib-devel二次开发所需库

apt-get install zlib1g-dev

第三步:安装Openssl库,安全的SSL协议,也是支持MD5、SHA1等散列函数的库。

下载地址:/source/index.html

在线安装:

apt-get install openssl libssl-dev

第四步:安装Nginx,地址:Index of /download/       

直接down最新源码包:

wget http://nginx.org/download/nginx-1.15.9.tar.gz

解压:

tar -zxvf nginx-1.15.9.tar.gz

进入解压后的目录:

cd nginx-1.15.9

运行配置:

./configure --prefix=/usr/local/nginx

编译:make,正常情况下不会有error

安装:make install

启动Nginx,-c 指定配置文件,默认是安装根目录下的nginx.conf

sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

至此大功告成,查看一下进程吧:

ps -ef | grep nginx

可以看到仍然是两个进程:

找一台电脑,连接你的CVM公网地址,默认80端口,就可以打开服务下的index.html页面了。

以上就是手动编译安装nginx的过程,那么接下来就看看怎么为nginx添加第三方的文件上传模块。


第三章:为Nginx添加nginx_upload_module模块

前面有讲过Nginx的服务由各个模块组成,靖哥哥就讲讲如何为Nginx添加一个nginx_upload_module模块。

nginx_upload_module模块用于接受并处理用户上传的文件,网上有很多该模块的配置方法,我这里只讲为Nginx添加该模块的方法。这里需要提一下,文件上传功能涉及webshell安全问题,其实一般不建议直接使用nginx来上传文件,而是通过后端服务来处理文件上传,nginx只为后端服务做一个简单的代理,后端服务先对访问用户进行鉴权,再将上传文件存放在非web目录。

nginx_upload_module模块最初的版本是十几年前的了,但是目前仍然才2.2版本,不清楚后续是否不在更新了,配置起来也有些麻烦。

Git:https://github.com/fdintino/nginx-upload-module

各个版本的下载地址:http://www.grid.net.ru/nginx/upload.en.html

下载模块:

wget http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz

解压:

tar -zxvf nginx_upload_module-2.2.0.tar.gz

警告:本章节剩余内容将会为你挖坑,如果不想在此继续折腾,请直接下载该模块https://github.com/winshining/nginx-upload-module并跳到下一章继续阅读,感谢开源,你只要知道这个模块填平了打补丁、宏定义、手动创建目录的坑即可。 

进入模块目录:

cd nginx_upload_module-2.2.0

下载补丁:davromaniak.txt(网上搜一个,就是这个名,要搜不到,恭喜,省事了,直接跳下一章吧)

打补丁:

patch ngx_http_upload_module.c davromaniak.txt

配置编译依赖库:

我用的是Openssl的库,Nginx1.11.2以后的版本NGX_HAVE_OPENSSL_MD5_H等宏被NGX_OPENSSL宏取代,

因此要将ngx_http_upload_module.c宏定义替换如下(最简单的方法,是注释掉兼容项):

 

这个时候,如果直接配置make,会报错'ngx_http_request_body_save_filter' follows non-static declaration。原因是1.0以上的Nginx已经声明并实现了ngx_http_request_body_save_filte方法。所以注释掉ngx_http_upload_module.c中的声明和实现就好了。

再次confingure和make就会不有错了。


第四章:Openssl搞事情

模块下载完成后,需要在configure中加入模块,并重新编译,如果使用指令./configure --prefix=/usr/local/nginx --add-module=../nginx_upload_module-2.2.0,如果提示OpenSSL library is not used

那么make的时候,会报如下错误:

出现这个错误,是因为没有启用NGX_OPENSSL宏。解决的办法是在编译时启用ngx_http_ssl_module,启用NGX_OPENSSL宏:

./configure --prefix=/usr/local/nginx --add-module=../nginx_upload_module-2.2.0  --with-http_ssl_module

最后就能make成功了,建议详细了解一下nginx编译参数说明。

如果你太衰了,还是编译不过,那么就直接下载Openssl源码,指定编译路径吧。

./configure --prefix=/usr/local/nginx --add-module=../nginx_upload_module-2.2.0 --with-openssl=/usr/local/software/openssl-1.0.2r --with-http_ssl_module

最后重启服务:

cd /usr/local/nginx/sbin/nginx/sbin

./nginx -s reload

第五章:nginx_upload_module模块测试

经过上面的操作,已经完成了nginx_upload_module模块的添加,然而还没对模块进行测试。

nginx_upload_module模块官网的包中带有一个nginx.conf配置文件,参照这个demo,就可以启用文件上传功能了。

简单的改一改存储路径,注意路径的散列序不能为0就行。

将这个配置文件重命名为nginx_upload.conf加载到nginx的conf目录,或者在conf.d中增加一个server配置,

cd到nginx安装路径的sbin目录下,停止nginx原有服务:

./nginx -s stop

启用新的配置服务:

./nginx -c /usr/local/nginx/conf/nginx_upload.conf

将官网的包中的upload.html加载到html目录,访问该页面:http://ip:port/upload.html即可测试文件上传服务。

需要注意upload.html要添加<!DOCTYPE html>声明,否则通过nginx无法访问这个页面。

操作的日志文件名在nginx_upload.conf的error_log配置中,cd logs/中 tail -f error.log可以实时跟踪日志,查看上传状态。

日志中通常会暴露三个问题:1、找不到对应目录。2、没有权限。3、找不到@test。

对于第1 2个问题,最直接的方法是替换成本文第三章红色字体部分的开源模块,

然后rm -rf掉原来安装的nginx,重新configure && make && make install

搞定1 2,文件就能成功上传了,只不过存储的位置,后缀名什么的需要在问题3来解决,各个业务有自己不同的需求,都是需要写一个后处理的程序。如果是使用php来做后处理,可以参考一下我的下一篇博文,点击传送门

总结

 主要介绍了nginx的安装使用,以及打第三方文件上传补丁。最后还是提醒一下,文件上传有风险,一定要鉴权并做好访问控制。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值