大家好,欢迎来到IT知识分享网。
Nginx面试题
1.什么是Nginx?
Nginx是一个高性能的HTTP和反向代理服务器,常用于做负载均衡服务器
2.为什么要用Nginx?
- 跨平台、配置简单
- 非阻塞、高并发连接:
处理2-3万并发连接数,官方监测能支持5万并发 - 内存消耗小:
开启10个nginx才占150M内存,Nginx采取了分阶段资源分配技术 - nginx处理静态文件好,耗费内存少
- 内置的健康检查功能:
如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。 - 节省宽带:
支持GZIP压缩,可以添加浏览器本地缓存 - 稳定性高:
宕机的概率非常小 - master/worker结构:
一个master进程,生成一个或者多个worker进程 - 接收用户请求是异步的:
浏览器将请求发送到nginx服务器,它先将用户请求全部接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力,一边接收web服务器的返回数据,一边发送给浏览器客户端 - 网络依赖性比较低,只要ping通就可以负载均衡
- 可以有多台nginx服务器
3.为什么Nginx性能这么高?
得益于它的事件处理机制:
异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
4、为什么不使用多线程?
Apache Tomcat: 创建多个进程或线程,而每个进程或线程都会为其分配cpu和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会榨干服务器资源。
Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。
5、Nginx是如何处理一个请求的呢?
首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket,再进行listen
然后再fork出多个子进程出来, 子进程会竞争accept新的连接。
此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后
此时,某一个子进程会accept成功,然后创建nginx对连接的封装,即ngx_connection_t结构体
接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。
最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了
6. 正向代理,反向代理
- 正向代理总结就一句话:代理端代理的是客户端
比如,国内访问google会被墙挡住,但是可以通过访问其他国家的服务器,达到访问Google的结果
如果是正向代理的话,就是其他国家的服务器解决了墙的问题,将你的访问直接转发到Google上面
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理
- 反向代理总结就一句话:代理端代理的是服务端
反向代理就是你压根就不知道你要访问的地址是哪里,但是一去访问一个服务器,但是这个服务器其实是去访问其他的服务器,得到数据后返回给你,你甚至不知道数据来源
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
7.动静态分离
动态资源、静态资源分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离
location ~.(png|jpg|css|js|htm|html){
root /home
}
8.为什么要做动、静分离?
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件)
这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗
当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问
这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中,毕竟Tomcat的优势是处理动态请求
9.负载均衡
负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中
负载均衡主要解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力
tomcatlist{
ip+port[weigth=3],
ip+port[weigth=1],
…
}
location /{
pass_proxy tomcat
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27327.html