记Nginx面试篇

1,890 阅读5分钟

一、简述一下什么是Nginx,它有什么优势和功能?

Nginx是一个web服务器/反向代理服务器以及邮件代理服务器,用于HTTP、HTTPS、SMTP、POP3和MAP协议,因它稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

优点如下:

  1. 更快

    表现在两个方面:一方面,在正常情况下,单词请求会得到很快的响应;另一方面,在高并发情况下,Nginx可以比其他Web服务更快的响应请求。

  2. 高扩展、跨平台

    Nginx的设计极具扩展性,它完全由多个不同功能,不同层次,不同类型且耦合度极低的模块组成。

    因此,当对某一模块修复Bug或者进行升级时,可以专注于模块自身,无须在意其他。而且在HTTP模块中,还设计了HTTP过滤器模块;一个正常的HTTP模块在处理完请求后,会有一串HTTP过滤器模块对请求的结构进行再处理。这样,当我们开发一个新的HTTP模块时,不但可以使用诸如HTTP核心模块,events模块、log模块等不同层次或者不同类型的模块,还可以原封不动地复用大量已有的HTTP过滤器模块。这种低耦合的优秀设计,造就了Nginx庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块易于使用。

    Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方发布的模块都是如此,这使得第三方模块易于具备优秀的性能,充分利用Nginx的高并发特性,因此,许多高流量网站都倾向于开发符合自己业务特性的定制模块。

  3. 高可靠性:用于反向代理,宕机的几率微乎其微

    高可靠性是我们选择Nginx的最基本条件,Nginx的高可靠性来自于其核心框架代码的设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在一个worder进程出错时可以快速”拉起“新的workder子进程提供服务。

  4. 低内存消耗

    一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础

  5. 单机支持10万以上的并发连接

    随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量的并发请求,一个能够在峰值期顶住10万以上并发请求的Server,无疑会得到很大的青睐。

  6. 热部署

    master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,Nginx还支持即使不停止服务也能更新配置项和更换日志文件的功能。

  7. 最自由的BSD许可协议

    BAD许可协议不仅允许用户免费试用Nginx,它还允许用户在自己的项目中直接使用或者修改Nginx源码并发布。

二、Nginx是如何处理一个HTTP请求的呢?

Nginx是一个高性能Web服务器,能够同时处理大量的并发请求,它结合多进程机制和异步机制,异步机制使用的是异步非阻塞的范式。

  1. 多进程机制

    服务器每当收到一个客户端时,就有服务器主进程生成一个子进程出来和客户端建立连接,直到连接断开,子进程也就结束。

  2. 异步非阻塞机制

    每个工作进程使用异步非阻塞方式,可以处理多个客户端请求。

    当某个工作进程接收到客户端的请求后,调用IO进行处理,如果不能立即得到结果,就去处理其他请求,而客户端在此期间也无需等待响应,可以去处理其他事情。

    当IO返回时,就会通知此工作进程;该进程得到通知,暂时挂起,当前处理的事物去响应客户端请求。

三、Nginx有哪些特性?

  1. 反向代理/L7负载均衡器

  2. 嵌入式Perl解释器

  3. 动态二进制升级

  4. 可用于重新编写URL,具有非常好的PCRE支持

四、在Nginx中,如何用未定义的服务器名称来阻止处理请求?

Server {    listen 80;    server_name "";    return 444;}

服务器名称保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444返回,从而终止连接。

五、Nginx服务器上的master和worker进程分别是什么?

  • 主程序 Master process启动后,通过一个for循环来接收和处理外部信号;

  • 主进程通过 fork() 函数产生worker子进程,每个worker子进程执行一个 for 循环来实现Nginx服务器对时间的接收和处理。

六、什么是正向代理?什么是反向代理

  1. 正向代理:客户端运行一个软件的时候,将我们的HTTP请求转发到其他不同的服务器端,实现请求转发

  2. 反向代理:服务器端接收请求时,将我们的请求分发给具体发服务器进行处理,在将服务器的相应结果反馈给客户端

七、Nginx有什么用途?

Nginx服务的最佳用途是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。