关于nginx服务器的知识

Nginx两大做用:1.轻量web容器 2.反向代理服务器。前端

在Java领域中,Nginx更多的被用做在前端提供负载均衡的反向代理服务。nginx

因此本文仅简要介绍下反向代理概念和负载均衡的实现。程序员

反向代理

是指以代理服务器来接受internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给internet上请求链接的客户端,此时代理服务器对外就表现为一个反向代理服务器。web

随便画了个流程图以下:算法

经常使用命令

nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。后端

nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。服务器

nginx -s reload 因改变了Nginx相关配置,须要从新加载配置而重载。网络

nginx -s reopen 从新打开日志文件。session

nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。并发

nginx -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

nginx -v 显示 nginx 的版本。

nginx -V 显示 nginx 的版本,编译器版本和配置参数。

Nginx负载均衡调度的方法

即上面配置中的upstream可选的四种负载均衡算法

 

    • 服务器轮询(默认方式):每一个请求访问按照时间顺序逐一分配到不一样的服务器端,若是后端某台服务器宕机时,故障系统会被自动的剔除,使用户访问不受影响。Weight(权重)指定轮询的权值,Weight值越大,分配到的访问概率越高,主要用于服务器端性能不均的状况下。
    • ip_hash:每一个请求按照访问的IP的Hash值进行分配,这行来自同一个IP的用户将会固定到后端的一个服务器,固定服务器后能够有效的解决网页存在的session共享的问题。
    • fair:该算法能够根据页面大小和加载时间长短智能的进行决策负载均衡,即根据后端服务器的响应时间来分配请求,响应时间段的优先分配。Nginx自己未集成fair模块,若是须要该调度算法,必须下载Nginx的upstream_fair模块,而后在config中配置加载。
    • url_hash:此调度算法是根据访问的url的hash结果来分配请求,使每一个url定向到同一个后端服务器,能够进一步的提升后端服务器的效率。Nginx自己未集成该模块,若是使用需安装Nginx的hash包,并编译加载到nginx。

Nginx的Master-Worker模式

nginx进程

启动Nginx后,其实就是在80端口启动了Socket服务进行监听,如图所示,Nginx涉及Master进程和Worker进程。

Master-Worker模式nginx.conf

Master进程的做用是?

读取并验证配置文件nginx.conf;管理worker进程;

Worker进程的做用是?

每个Worker进程都维护一个线程(避免线程切换),处理链接和请求;注意Worker进程的个数由配置文件决定,通常和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

思考:Nginx如何作到热部署?

所谓热部署,就是配置文件nginx.conf修改后,不须要stop Nginx,不须要中断请求,就能让配置文件生效!(nginx -s reload 从新加载/nginx -t检查配置/nginx -s stop)

经过上文咱们已经知道worker进程负责处理具体的请求,那么若是想达到热部署的效果,能够想象:

方案一:

修改配置文件nginx.conf后,主进程master负责推送给woker进程更新配置信息,woker进程收到信息后,更新进程内部的线程信息。(有点valatile的味道)

方案二:

修改配置文件nginx.conf后,从新生成新的worker进程,固然会以新的配置进行处理请求,并且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些之前的请求处理完毕后,kill掉便可。

Nginx采用的就是方案二来达到热部署的!

思考:Nginx如何作到高并发下的高效处理?

上文已经说起Nginx的worker进程个数与CPU绑定、worker进程内部包含一个线程高效回环处理请求,这的确有助于效率,但这是不够的。

做为专业的程序员,咱们能够开一下脑洞:BIO/NIO/AIO、异步/同步、阻塞/非阻塞...

要同时处理那么多的请求,要知道,有的请求须要发生IO,可能须要很长时间,若是等着它,就会拖慢worker的处理速度。

Nginx采用了Linux的epoll模型,epoll模型基于事件驱动机制,它能够监控多个事件是否准备完毕,若是OK,那么放入epoll队列中,这个过程是异步的。worker只须要从epoll队列循环处理便可。

相关文章
相关标签/搜索