Nginx的特点(web服务器)
·跨平台
·配置异常简单:
·非堵塞异步、高并发连接:数据复制时,磁盘I/O的第一个阶段是非堵塞的。官方测试能够支撑5万并发连接,在实际声场环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型)
·事件驱动:通信机制采用epoll模型,支持最大的并发连接。
·master/worker结构:一个master进程,生成一个或多个worker进程
·内存消耗小:
成本低廉:
·内置的健康检查:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。
·节省带宽
·稳定性高:用于反向代理,宕机的概率微乎其微
Nginx的不为人知的特点
·nginx代理和后端web服务器间无需长连接;
·接受用户请求时异步的,即先将用户请求全部接受下来,再一次性发送后后端web服务,极大的减轻后端Web服务器的压力
·发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的。
·网络依赖性低.Nginx对网络的依赖程度非常低,理论上讲,只要能够ping同就可以实施负载均衡,而且可以有效区分内网和外网流量。
·支持服务器检测。nginx能够根据应用服务器处理页面返回的状态码,超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其他节点上。
Nginx的内部(进程)模型
file:///C:/Users/liyue/AppData/Local/Temp/Wiz/d9204a13-c8e6-4049-91cf-a294d96de39a_128_files/clip_image002.jpg
Nginx是如何处理请求
·首先,nginx在启动时,会解析配置文件,得到需要监听的端口与IP地址,然后在nginx的master进程里,先初始化这个监控socket(创建socket,设置address等选项,绑定到指定的IP地址端口,再listen),然后再fork(一个现有进程可以调用fork函数创建一个新进程,由fork创建的新进程被称为子进程)出多个子进程出来,然后子进程竞争accpet新的连接。此时,客户端就可以向那个nginx发起连接了。当客户端与nginx进行三次握手,与nginx简历好一个连接后,此时,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建nginx对连接的封装,即ngx_connection_t结构体,接着,设置读写时间处理函数并添加读写事件来与客户端进行数据的交换。最后,nginx客户端来主动关掉连接,到此,一个连接结束。
Linux下nginx的基本操作及配置文件位置
·查看nginx是否启动,查看nginx进程和用ip在浏览器中访问一下:
ps -ef | grep nginx
·如果开启防火墙,那么在防火墙中添加80端口:
iptables –I INPUT –p tcp –dport 80 –j ACCEPT
service iptables save
service iptables restart
·Nginx管理:
#默认启动方式:
/usr/local/nginx/sbin/nginx
#停止方式:
/usr/local/nginx/sbin/nginx –s stop
#重新加载
/usr/local/nginx/sbin/nginx –s reload
#带测试配置文件启动方式
/usr/local/nginx/sbin/nginx –c /usr/local/nginx/conf/nginx.conf
#测试nginx配置文件
/usr/local/nginx/sbin/nginx –t
#从容停止
kill –QUIT ‘cat/usr/local/nginx/nginx.pid’(这句是根据cat指令得出pid)
#快速停止
kill –INT ‘cat /usr/local/nginx/nginx.pid’ (这句是根据cat指令得出pid)
#平滑重启
kill –HUP ‘cat /usr/local/nginx/nginx.pid’ (这句是根据cat指令得出pid);
小知识点KILL
kill—是不可以封锁的,它在OS级别上终止进程
□QUIT:处理完当前请求后,关闭进程。
□USR1,用于Nginx的日志切换,也就是重新打开一个日志文件,例如每天要生成一个新的日志文件时,可以使用这个信号来控制。
□USR2,用于平滑升级可执行程序。
□WINCH,从容关闭工作进程
□HUP----表示重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。
(通常情况)有两种解释:
1、 它被许多守护进程理解为一个重新设置的请求。如果一个进程不用重新启动就能读取他的配置文件并调整自给以适应变化,那么HUP通常来触发这中年行为。
2、 HUP信号有时候由终端驱动程序生成,试图来“清楚(终止)”跟某个特定终端相连的哪些进程。例如某个终端会话结束时,或者当调制解调器被挂断时,shell后台不接受HUP的信号的影响,有的用户可以使用nohup来模仿这种行为。
apache与nginx的区别
nginx相对于apache的优点:
轻量级,占用资源较少
抗并发,nginx处理请求是异步非堵塞的,而apache是阻塞型的。apache是同步多进程模型,一个连接对应一个进程。nginx是异步的,多个连接(万级别)可以对应一个进程。
配置简洁
Nginx静态处理性能比Apache高3倍以上。
nginx本身是一个反向代理服务器,支持7层负载均衡;
支持热部署,启动速度迅速。
高性能原因:epoll网络IO模型
apache相对于nginx的优点:
rewrite,比nginx的rewrite强大
动态请求:要apache去做,nginx只适合静态和反向。
少bug,nginx的bug相对较多
超稳定。
总结:
需要性能的web服务,用nginx,如果不需要性能只求稳定,用apache。
Nginx的模块下一次常规的HTTP请求和响应的过程
file:///C:/Users/liyue/AppData/Local/Temp/Wiz/d9204a13-c8e6-4049-91cf-a294d96de39a_128_files/clip_image004.jpg
在工作方式上,Nginx分为单工作进程和多工作进程模式。在单工作进程模式上,
除主进程外,还有一个工作进程,工作进程是单线程的;在多工作进程模式下,每个工作进程包含多个进程。Nginx默认为单工作进程模式。在多工作进程模式下,每个工作进程包括多个线程。Nginx默认为单工作进程模式。
Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动nginx后,Nginx默认为单工作进程模式。
Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动Nginx后,Nginx的模块被自动加载,而在Apache中,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个请求只能由一个模块来完成。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |