NGINX是一款由俄罗斯人伊戈尔·赛索耶夫使用C语言开发的、支持热部署的、轻量级的WEB服务器/反向代理服务器/电子邮件代理服务器,因为占用内存较少,启动极快,高并发能力强,所以在互联网项目中广泛应用。可以在 UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及 Microsoft Windows 等操作系统中运行。
NGINX可以作为静态页面的WEB服务器,同时还支持CGI协议的动态语言,比如Perl、PHP等。NGINX专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,NGINX在官方测试中,能够支持五万个平行链接,而在实际的运作中,可以支持二万至四万个平行链接,总结如下:
请求同时满足以下两个条件,称为简单请求,否则为复杂请求
凡是不简单请求的,都属于复杂请求,常见的复杂请求:
动静分离,其实就是使用NGINX的特性,将客户端发来的请求分为动态请求和静态请求。静态请求直接从NGINX服务器所设定的根目录去获取对应的资源,动态请求则转发给真实的后端服务去处理。这样不仅能够减轻应用服务器的压力,将后台API接口服务化,还能将前后端代码分开并行开发和部署。一般常见于SPRINGBOOT + VUE的项目中。
那么,如何配置呢?
正向代理隐藏了真实的客户端,VPN其实就是一个正向代理工具。当使用VPN访问墙外网站是,VPN将访问请求,代理到一个可以访问该网站的代理服务器上,代理服务器把墙外服务器上获取的请求结果,再转发给客户端,这就是正向代理。
反向代理隐藏了真实的服务端,当我们访问百度时,其实内部会进行一个转发,将请求代理到内网去,但是具体是哪一台,我们不知道,我们也不需要知道,这就是所谓的反向代理,即反向代理“代理”的是服务器端,且这个过程对于客户端而言是透明的。
负载均衡采用的就是反向代理。
在互联网项目中,当遇到请求爆发式增长的情况时,单个服务器无法处理客户端请求,需要使用多个服务器来分摊压力,这就是负载均衡的初衷。
NGINX采用MASTER-WORKER的模式,NGINX在启动后,会以守候进程的方式在后台运行,启动后包含一个MASTER进程和多个WORKER进程,WORKER进程以非root用户运行,当然也可以在配置文件中配置运行 WORKER进程的用户。
WORKER进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个WORKER进程。
那么,如何配置WORKER的用户以及进程数呢?
所谓热部署,就是配置文件nginx.conf修改后,不需要停止NGINX服务,不需要中断请求,就能让配置文件生效!但是,NGINX必须重新加载一下nginx.conf,否则修改不生效。
使用如下命令,重新加载配置文件:
nginx -s reload
当配置文件nginx.conf修改后,需要执行重新加载配置的指令,此时NGINX接收到热加载的信号后,会重新生成新的WORKER进程,当然也是以新的配置进行请求处理的,而且新的请求一定会交给新的WORKER进程。当老的WORKER进程处理完请求后,进程会被杀死。