Nginx概述
1、Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
摘自:https://baike.baidu.com/item/nginx/3817705?fr=aladdin
2、Nginx作用
Nginx主要有两个作用:
静态资源Web服务器
Nginx可以作为静态资源的服务器,比如html和文件。动态资源的代理服务器
Nginx可以作为其他应用服务器的代理服务器,可以作为软负载,负载均衡多台服务器,对外暴露一个域名服务器。
正向代理和反向代理
- 正向代理
类似于客户端VPN,需要在客户端进行相关配置,才能访问服务器,实际上代理的是客户端,隐藏了客户端信息。 - 反向代理
代理的是服务端,隐藏了真正的服务器信息,客户端访问的是代理服务器。
Nginx进程结构
Nginx为了高可用和高可靠而设计,故采用多进程模式,如下图所示:由一个主进程和多个worker进程以及缓存进程组成。
Worker进程数量一般与计算机CPU个数相同,在nginx.conf配置文件中配置worker_processes auto
,使用lscpu
命令查看当前cpu个数,会发现启动的worker进程与cup个数相等。
特点:
- Master进程并不处理用户请求,而是由Worker Process处理用户请求。
- 子进程是使用同一个地址空间来实现。
- 子进程之间使用共享内存方式进行通信。
- Cache Manager和Cache Loader主要是反向代理时做缓存使用。
使用信号量管理Master和Worker进程
1、使用信号量杀死Master进程
kill -s sigterm 206360
也可以不加sig
,下面的同上
kill -s term 206360
说明
:这里是主进程ID,如果输入worker子进程ID,worker子进程会被杀掉,但是会重新启动一个worker子进程。
2、使用信号量重新加载配置文件
kill -s sighup 209963
说明
:如下图所示,重新加载配置文件后,主进程ID并没有改变,但是所有的worker子进程ID都变化了,所有的worker进程都是新进程。
3、接收SIGCHLD信号
说明
: 主进程监控worker进程,使用SIGCHLD信号,如果worker进程宕机挂掉,会发送SIGCHLD信号给master进程。
4、接收其他信号
- TERM,INT:杀死进程
- QUIT:退出
- USR1:重新打开
- USR2:启动新的主进程,实现热升级
- WINCH:从容关闭进程,如:
kill -s winch 主或工作进程ID
5、Worker进程可以接收信号
- TERM,INT:杀死进程
- QUIT:退出
- USR1:重新打开
- WINCH:从容关闭工作进程
说明
: QUIT是从容停止,TERM,INT是快速停止,kill -9是强制停止Nginx进程。
使用命令行管理Master和Worker进程
1、启动nginx命令
/nginx/sbin/nginx
说明
:找到nginx目录下的sbin目录下的nginx,直接执行即可。
2、查看nginx命令
sbin/nginx -h
如下图所示,除了查看版本号外,可以使用-s来管理nginx进程,下图框起来英文意思是:这些命令是通过向主进程发送信号来实现的。
3、停止nginx
sbin/nginx -s stop
说明
:stop 其实发送的是TERM
信号,类似于kill -s sigterm 主进程id
。
4、重新启动nginx
sbin/nginx -s reload
说明
:reload其实发送的是HUP
信号,类似于kill -s sighup 主进程id
。
5、重新打开nginx
sbin/nginx -s reopen
说明
:reopen其实发送的是USR1
信号,类似于kill -s sigusr1 主进程id
。
6、退出nginx
sbin/nginx -s quit
说明
:quit其实发送的是QUIT
信号,类似于kill -s sigquit 主进程id
。
7、查看nginx版本
sbin/nginx -v
8、查看nginx版本及编译配置
sbin/nginx -V
9、测试nginx编译配置
sbin/nginx -t
10、测试nginx编译配置并dump
sbin/nginx -T