Nginx面试中最常见的18道题
Nginx⾯试中最常见的18道题
Nginx的并发能⼒在同类型⽹页服务器中的表现,相对⽽⾔是⽐较好的,因此受到了很多企业的青睐,我国使⽤Nginx⽹站的知名⽤户包括腾讯、淘宝、百度、京东、新浪、⽹易等等。Nginx是⽹页服务器运维⼈员必备技能之⼀,下⾯为⼤家整理了⼀些⽐较常见的Nginx相关⾯试题,仅供参考:
1、请解释⼀下什么是Nginx?
Nginx---Ngine X,是⼀款免费的、⾃由的、开源的、⾼性能HTTP服务器和反向代理服务器;也是⼀个IMAP、POP3、SMTP代理服务器;Nginx以其⾼性能、稳定性、丰富的功能、简单的配置和低资源消耗⽽闻名。
也就是说Nginx本⾝就可以托管⽹站(类似于Tomcat⼀样),进⾏Http服务处理,也可以作为反向代理服务器、负载均衡器和HTTP缓存。
Nginx 解决了服务器的C10K(就是在⼀秒之内连接客户端的数⽬为10k即1万)问题。它的设计不像传统的服务器那样使⽤线程处理请求,⽽是⼀个更加⾼级的机制—事件驱动机制,是⼀种异步事件驱动结构。
2、请列举Nginx的⼀些特性
跨平台:可以在⼤多数Unix like 系统编译运⾏。⽽且也有Windows的移植版本。
配置异常简单:⾮常的简单,易上⼿。
⾮阻塞、⾼并发连接:数据复制时,磁盘I/O的第⼀阶段是⾮阻塞的。官⽅测试能⽀持5万并发连接,实际⽣产中能跑2~3万并发连接数(得益于Nginx采⽤了最新的epoll事件处理模型(消息队列)。
Nginx代理和后端Web服务器间⽆需长连接;
Nginx接收⽤户请求是异步的,即先将⽤户请求全部接收下来,再⼀次性发送到后端Web服务器,极⼤减轻后端Web服务器的压⼒。
发送响应报⽂时,是边接收来⾃后端Web服务器的数据,边发送给客户端。
⽹络依赖性低,理论上只要能够ping通就可以实施负载均衡,⽽且可以有效区分内⽹、外⽹流量。
⽀持内置服务器检测。Nginx能够根据应⽤服务器处理页⾯返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。
此外还有内存消耗⼩、成本低廉(⽐F5硬件负载均衡器廉价太多)、节省带宽、稳定性⾼等特点。
3、请列举Nginx和Apache 之间的不同点
4、请解释Nginx如何处理HTTP请求。
Nginx 是⼀个⾼性能的 Web 服务器,能够同时处理⼤量的并发请求。它结合多进程机制和异步机制,异步机制使⽤的是异步⾮阻塞⽅式,接下来就给⼤家介绍⼀下 Nginx 的多线程机制和异步⾮阻塞机制。
1、多进程机制
服务器每当收到⼀个客户端时,就有服务器主进程( master process )⽣成⼀个⼦进程( worker process )出来和客户端建⽴连接进⾏交互,直到连接断开,该⼦进程就结束了。
使⽤进程的好处是各个进程之间相互独⽴,不需要加锁,减少了使⽤锁对性能造成影响,同时降低编程的复杂度,降低开发成本。其次,采⽤独⽴的进程,可以让进程互相之间不会影响,如果⼀个进程发⽣异常退出时,其它进程正常⼯作, master 进程则很快启动新的 worker 进程,确保服务不会中断,从⽽将风险降到最低。
缺点是操作系统⽣成⼀个⼦进程需要进⾏内存复制等操作,在资源和时间上会产⽣⼀定的开销。当有⼤量请求时,会导致系统性能下降。
2、异步⾮阻塞机制
每个⼯作进程使⽤异步⾮阻塞⽅式,可以处理多个客户端请求。
当某个⼯作进程接收到客户端的请求以后,调⽤ IO 进⾏处理,如果不能⽴即得到结果,就去处理其他请求(即为⾮阻塞);⽽客户端在此期间也⽆需等待响应,可以去处理其他事情(即为异步)。
当 IO 返回时,就会通知此⼯作进程;该进程得到通知,暂时挂起当前处理的事务去响应客户端请求。
5、在Nginx中,如何使⽤未定义的服务器名称来阻⽌处理请求?
只需将请求删除的服务器就可以定义为:
这⾥,服务器名被保留为⼀个空字符串,它将在没有“主机”头字段的情况下匹配请求,⽽⼀个特殊的Nginx的⾮标准代码444被返回,从⽽终⽌连接。
6、使⽤“反向代理服务器”的优点是什么?
反向代理服务器可以隐藏源服务器的存在和特征。它充当互联⽹云和web服务器之间的中间层。这对于安全⽅⾯来说是很好的,特别是当您使⽤web托管服务时。
7、请列举Nginx服务器的最佳⽤途。
Nginx服务器的最佳⽤法是在⽹络上部署动态HTTP内容,使⽤SCGI、WSGI应⽤程序服务器、⽤于脚本的FastCGI处理程序。它还可以作为负载均衡器。
8、请解释Nginx服务器上的Master和Worker进程分别是什么?
主程序 Master process 启动后,通过⼀个 for 循环来接收和处理外部信号;
主进程通过 fork() 函数产⽣ worker ⼦进程,每个⼦进程执⾏⼀个 for循环来实现Nginx服务器对事件的接收和处理。
⼀般推荐 worker 进程数与CPU内核数⼀致,这样⼀来不存在⼤量的⼦进程⽣成和管理任务,避免了进程之间竞争CPU 资源和进程切换的开销。⽽且Nginx 为了更好的利⽤多核特性,提供了 CPU 亲缘性的绑定选项,我们可以将某⼀个进程绑定在某⼀个核上,这样就不会因为进程的切换带来 Cache 的失效。
对于每个请求,有且只有⼀个⼯作进程对其处理。⾸先,每个 worker 进程都是从 master进程 fork 过来。在 master 进程⾥⾯,先建⽴好需要 listen 的socket(listenfd)之后,然后再 fork 出多个 worker 进程。
所有 worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有⼀个进程处理该连接,所有 worker 进程在注册 listenfd 读事件前抢占 accept_mutex ,抢到互斥锁的那个进程注册 listenfd 读事件,在读事件⾥调⽤ accept 接受该连接。
当⼀个 worker 进程在 accept 这个连接之后,就开始读取请求、解析请求、处理请求,产⽣数据后,再返回给客户端,最后才断开连接。这样⼀个完整的请求就是这样的了。我们可以看到,⼀个请求,完全由 worker 进程来处理,⽽且只在⼀个 worker 进程中处理。
在 Nginx 服务器的运⾏过程中,主进程和⼯作进程需要进程交互。交互依赖于 Socket 实现的管道来实现。
9、请解释代理设计中的正向代理和反向代理?
⾸先,代理服务器⼀般指局域⽹内部的机器通过代理服务器发送请求到互联⽹上的服务器,代理服务器⼀般作⽤在客户端。例如:GoAgentFQ软件。我们的客户端在进⾏FQ操作的时候,我们使⽤的正是正向代理,通过正向代理的⽅式,在我们的客户端运⾏⼀个软件,将我们的HTTP请求转发到其他不同的服务器端,实现请求的分发。
反向代理服务器作⽤在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务器进⾏处理,然后再将服务器的相应结果反馈给客户端。Nginx就是⼀个反向代理服务器软件。
从上图可以看出:客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端⼝。
反向代理正好与正向代理相反,对于客户端⽽⾔代理服务器就像是原始服务器,并且客户端不需要进⾏任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
10、请解释是否有可能将Nginx的错误替换为502错误、503?
502 =错误⽹关
503 =服务器超载
有可能,但是您可以确保fastcgi_intercept_errors被设置为ON,并使⽤错误页⾯指令。
11、在Nginx中,解释如何在URL中保留双斜线?
要在URL中保留双斜线,就必须使⽤merge_slashes_off;
语法:merge_slashes [on/off]
默认值: merge_slashes on
环境: http,server
12、请解释ngx_http_upstream_module的作⽤是什么?
ngx_http_upstream_module⽤于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引⽤的服务器组。
13、请解释什么是C10K问题?
如何设置代理服务器
C10K问题是指⽆法同时处理⼤量客户端(10,000)的⽹络套接字。
14、请陈述stub_status和sub_filter指令的作⽤是什么?
Stub_status指令:该指令⽤于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数;
Sub_filter指令:它⽤于搜索和替换响应中的内容,并快速修复陈旧的数据;
15、解释Nginx是否⽀持将请求压缩到上游?
您可以使⽤Nginx模块gunzip将请求压缩到上游。gunzip模块是⼀个过滤器,它可以对不⽀持“gzip”编码⽅法的客户机或服务器使⽤“内容编码:gzip”来解压缩响应。
16、解释如何在Nginx中获得当前的时间?
要获得Nginx的当前时间,必须使⽤SSI模块、$date_gmt和$date_local的变量。
Proxy_set_header THE-TIME $date_gmt;
17、⽤Nginx服务器解释-s的⽬的是什么?
⽤于运⾏Nginx -s参数的可执⾏⽂件。
18、解释如何在Nginx服务器上添加模块?
在编译过程中,必须选择Nginx模块,因为Nginx不⽀持模块的运⾏时间选择。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。