一、简述一下什么是Nginx,它有什么优势和功能?
Nginx是一个web服务器/反向代理服务器以及邮件代理服务器,用于HTTP、HTTPS、SMTP、POP3和MAP协议,因它稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
优点如下:
-
更快
表现在两个方面:一方面,在正常情况下,单词请求会得到很快的响应;另一方面,在高并发情况下,Nginx可以比其他Web服务更快的响应请求。
-
高扩展、跨平台
Nginx的设计极具扩展性,它完全由多个不同功能,不同层次,不同类型且耦合度极低的模块组成。
因此,当对某一模块修复Bug或者进行升级时,可以专注于模块自身,无须在意其他。而且在HTTP模块中,还设计了HTTP过滤器模块;一个正常的HTTP模块在处理完请求后,会有一串HTTP过滤器模块对请求的结构进行再处理。这样,当我们开发一个新的HTTP模块时,不但可以使用诸如HTTP核心模块,events模块、log模块等不同层次或者不同类型的模块,还可以原封不动地复用大量已有的HTTP过滤器模块。这种低耦合的优秀设计,造就了Nginx庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块易于使用。
Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方发布的模块都是如此,这使得第三方模块易于具备优秀的性能,充分利用Nginx的高并发特性,因此,许多高流量网站都倾向于开发符合自己业务特性的定制模块。
-
高可靠性:用于反向代理,宕机的几率微乎其微
高可靠性是我们选择Nginx的最基本条件,Nginx的高可靠性来自于其核心框架代码的设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在一个worder进程出错时可以快速”拉起“新的workder子进程提供服务。
-
低内存消耗
一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础
-
单机支持10万以上的并发连接
随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量的并发请求,一个能够在峰值期顶住10万以上并发请求的Server,无疑会得到很大的青睐。
-
热部署
master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,Nginx还支持即使不停止服务也能更新配置项和更换日志文件的功能。
-
最自由的BSD许可协议
BAD许可协议不仅允许用户免费试用Nginx,它还允许用户在自己的项目中直接使用或者修改Nginx源码并发布。
二、Nginx是如何处理一个HTTP请求的呢?
Nginx是一个高性能Web服务器,能够同时处理大量的并发请求,它结合多进程机制和异步机制,异步机制使用的是异步非阻塞的范式。
-
多进程机制
服务器每当收到一个客户端时,就有服务器主进程生成一个子进程出来和客户端建立连接,直到连接断开,子进程也就结束。
-
异步非阻塞机制
每个工作进程使用异步非阻塞方式,可以处理多个客户端请求。
当某个工作进程接收到客户端的请求后,调用IO进行处理,如果不能立即得到结果,就去处理其他请求,而客户端在此期间也无需等待响应,可以去处理其他事情。
当IO返回时,就会通知此工作进程;该进程得到通知,暂时挂起,当前处理的事物去响应客户端请求。
三、Nginx有哪些特性?
-
反向代理/L7负载均衡器
-
嵌入式Perl解释器
-
动态二进制升级
-
可用于重新编写URL,具有非常好的PCRE支持
四、在Nginx中,如何用未定义的服务器名称来阻止处理请求?
Server { listen 80; server_name ""; return 444;}
服务器名称保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444返回,从而终止连接。
五、Nginx服务器上的master和worker进程分别是什么?
-
主程序 Master process启动后,通过一个for循环来接收和处理外部信号;
-
主进程通过 fork() 函数产生worker子进程,每个worker子进程执行一个 for 循环来实现Nginx服务器对时间的接收和处理。
六、什么是正向代理?什么是反向代理
-
正向代理:客户端运行一个软件的时候,将我们的HTTP请求转发到其他不同的服务器端,实现请求转发
-
反向代理:服务器端接收请求时,将我们的请求分发给具体发服务器进行处理,在将服务器的相应结果反馈给客户端
七、Nginx有什么用途?
Nginx服务的最佳用途是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。