Nginx作为一款轻量级WEB服务服务器,除了作为http代理和反向代理服务器,还更广泛的运用于负载均衡、高级http服务、邮件代理服务等。接下来,我们开始学习如何下载安装Nginx服务器,包括windows平台和linux平台。
Nginx的官方网址:http://nginx.org
Nginx下载地址:http://nginx.org/en/download.html
下载图1中的nginx/Windows-1.12.0,得到window版本的nginx压缩包。
windows版本为绿色版本,解压即用,无须安装。解压下载的压缩包,得到如下的目录结构:
直接运行图2的nginx.exe即启动了nginx,同时可以在任务管理器中看到有两个nginx.exe的进程。
运行cmd,进入nginx目录,运行命令
nginx.exe 这种方式会使命令行一直处于执行中,无法进行后续操作
start nginx 推荐
如果启动未出现异常信息,表明启动成功,任务管理器中会出现两个nginx.exe的进程。
直接在任务管理器中kill掉nginx进程,不推荐。
运行cmd,进入nginx目录,输入命令
nginx.exe –s quit 推荐,这种方式是平缓停止,完整有序的停止nginx,并保存相关信息
或者
nginx.exe –s stop 快速停止nginx,不保存相关信息。
运行cmd,进入nginx目录,输入命令
nginx –s reload
运行cmd,进入nginx目录,输入命令
nginx –s reopen
./sbin/nginx –v
或者
./sbin/nginx –V
大写的V会输出更多的版本及编译配置信息。
由于linux下的nginx大多是编译源码进行安装,我们需要检查编译nginx的必备条件。
内核版本
首先我们需要一个内核为Linux 2.6及以上版本的操作系统,因为Linux 2.6及以上内核才支持epoll,而在Linux上使用select或poll来解决事件的多路复用,是无法解决高并发压力问题的。查看linux内核版本:
[root@iZwz9g2hqiikgs5lncf7f7Z ~]# uname -a
Linux iZwz9g2hqiikgs5lncf7f7Z 2.6.32-642.13.1.el6.x86_64 #1 SMP Wed Jan 11 20:56:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@iZwz9g2hqiikgs5lncf7f7Z ~]#
磁盘空间
保证磁盘空间够大,虽然nginx本身不需要太大的磁盘空间,但是随着第三方模块的加入,所需要的磁盘空间会增大。
GCC编译器:编译c语言程序
yum install -y gcc
yum install -y gcc-c++
PCRE库:支持rewrite模块
PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由Philip Hazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。Nginx的HTTP模块要靠它来解析正则表达式。
yum install –y pcre pcre-devel
pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。
ZLIB库:支持gzip模块
zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。其yum安装方式如下:
yum install -y zlib zlib-devel
同理,zlib是直接使用的库,zlib-devel是二次开发所需要的库
Openssl库:支持ssl模块
如果服务器需要在安全的SSL协议上传输HTTP,或者使用MD5、SHA1等散列函数,需要安装该模块。
yum install –y openssl openssl-devel
./configure
make
make install
configure文件做一些准备工作;
make命令根据configure命令生成的makefile文件编译nginx工程,并生成目标文件、最终的二进制文件;
make install命令根据configure执行时的参数将nginx部署到指定的按照目录,包括相关目录的简历和二进制文件、配置文件的复制等。
1、直接执行二进制程序:
[root@iZwz9g2hqiikgs5lncf7f7Z nginx]# pwd
/usr/local/nginx
[root@iZwz9g2hqiikgs5lncf7f7Z nginx]#
[root@iZwz9g2hqiikgs5lncf7f7Z nginx]# ./sbin/nginx
这时,会读取nginx安装目录下的配置文件:/usr/local/nginx/conf/nginx.conf
2、指定配置文件的方式启动:
/usr/local/nginx/sbin/nginx –c /tmp/nginx.conf
这时,会读取-c参数后指定的nginx.conf配置文件来启动nginx。
3、指定安装目录的方式启动
/usr/local/nginx/sbin/nginx –p /usr/local/nginx/
4、指定全局配置项的启动方式
/usr/local/nginx/sbin/nginx –g “pid /var/nginx/test.pid”
这意味着nginx的pid文件会写入到指定的目录。-g参数不能与默认路径下的nginx.conf配置冲突,否则无法成功启动。
终止进程
ps -ef | grep nginx
kill –s SIGTERM 10800
或
Kill –s SIGINT 10800
使用stop命令
./sbin/nginx –s stop
当快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。
停止master进程:
./sbin/nginx –s quit
等同于
kill -s SIGQUIT
停止work进程:
kill -s SIGWINCH
平滑停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。
/usr/local/nginx/sbin/nginx -s reload
Nginx会先检查新的配置项是否有误,如果全部正确就以“优雅”的方式关闭,再重新启动Nginx来实现这个目的。类似的,-s是发送信号,仍然可以用kill命令发送HUP信号来达到相同的效果。
kill -s SIGHUP
使用-s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大。例如:
/usr/local/nginx/sbin/nginx -s reopen
当然,这与使用kill命令发送USR1信号效果相同。
kill -s SIGUSR1
Nginx支持不重启服务来完成新版本的平滑升级,步骤如下。
通知正在运行的旧版本Nginx准备升级。通过向master进程发送USR2信号可达到目的。例如:
kill -s SIGUSR2
这时,运行中的Nginx会将pid文件重命名,如将/usr/local/nginx/logs/nginx.pid重命名为/usr/local/nginx/logs/nginx.pid.oldbin,这样新的Nginx才有可能启动成功。
启动新版本的Nginx,可以使用以上介绍过的任意一种启动方法。这时通过ps命令可以发现新旧版本的Nginx在同时运行。
通过kill命令向旧版本的master进程发送SIGQUIT信号,以“优雅”的方式关闭旧版本的Nginx。随后将只有新版本的Nginx服务运行,此时平滑升级完毕。
./sbin/nginx –v
或者
./sbin/nginx –V
大写的V会输出更多的版本及编译配置信息。
Nginx作为轻量级、高并发、高性能的web服务器,目前使用非常广泛。本文讲解了windows和linux下nginx的下载、安装和启动、停止等常规操作,一般建议Nginx部署在Linux服务器上,以发挥其高并发、高性能的特点。
1、nginx官方安装文档:http://nginx.org/en/docs/install.html
2、《深入理解Nginx:模块开发与架构解析(第2版)》
3、《Nginx高性能WEB服务器详解》
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
make && make install
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf