Nginx常见面试题

news/2024/7/9 17:40:28 标签: 运维, epoll, python

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

什么是Nginx?
    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器
    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
    目前使用的最多的web服务器或者代理服务器,像淘宝、新浪、网易、迅雷等都在使用
为什么要用Nginx?
    优点:
        跨平台、配置简单
        非阻塞、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发
        内存消耗小:开启10个nginx才占150M内存
        成本低廉:开源
        内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
        节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
        稳定性高:宕机的概率非常小
        master/worker结构:一个master进程,生成一个或者多个worker进程
        接收用户请求是异步的:浏览器将请求发送到nginx服务器,它先将用户请求全部接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力
        一边接收web服务器的返回数据,一边发送给浏览器客户端
        网络依赖性比较低,只要ping通就可以负载均衡
        可以有多台nginx服务器
        事件驱动:通信机制采用epoll模型
为什么Nginx性能这么高?
    得益于它的事件处理机制:
        异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
为什么不使用多线程?
    因为线程创建和上下文的切换非常消耗资源,线程占用内存大,上下文切换占用cpu也很高,采用epoll模型避免了这个缺点
Nginx是如何处理一个请求的呢?
    首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面
    先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen)
    然后再fork(一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程 )出多个子进程出来
    然后子进程会竞争accept新的连接。此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后
    此时,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建nginx对连接的封装,即ngx_connection_t结构体
    接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了
正向代理
    一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)
    然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理
    正向代理总结就一句话:代理端代理的是客户端
反向代理
    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求,发给内部网络上的服务器
    并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
    反向代理总结就一句话:代理端代理的是服务端
动态资源、静态资源分离
    动态资源、静态资源分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后
    我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
    动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离
为什么要做动、静分离?
    在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件)
    这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗
    当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决
    
    动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问
    这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中
负载均衡
    负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中
    负载均衡主要解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力

转载于:https://my.oschina.net/gibbons/blog/900493


http://www.niftyadmin.cn/n/840904.html

相关文章

我的前端进阶之路

前言 总括: 包含这三个月来碰到的一些觉得比较好的面试题,三个月没怎么写博客着实有些手痒,哈哈哈。7000余字,不成敬意2333 原文地址:我的前端进阶之路 知乎专栏&&简书专题:前端进击者(…

离线安装docker最新版,记得要以下三个包。

如果安装了以前版本,还要删除以下这个包。 container-selinux.noarch 2:2.10-2.el7 离线安装三个rpm -rw-r--r--. 1 root root 19524568 May 15 10:04 docker-ce-17.03.1.ce-1.el7.centos.x86_64.rpm-rw-r--r--. 1 root root 29108 May 15 10:04 docker-ce-selinux…

“拼木头”算法挑战赛:禁忌搜索算法,用Javascript 跑

题目来源见文章《帮一个朋友征集算法代码,大家都来开动你的脑袋发挥你的智慧参与吧》,大家提出了很多算法,很多人说类似百钱买百鸡,这里要讨论一下,拼木头问题和百钱买百鸡问题是很不一样的。 百钱买百鸡问题&#x…

本国货币贬值对经济的影响

本国货币贬值对经济的影响Ⅰ.本币贬值对国际收支的影响。①本币贬值对进出口收入有影响。一国货币贬值通过降低本国商品相对外国产品的价格,使国外人们增加对本国产品的需求,本国居民减少对外国产品的需求,从而有利于本国的出口&a…

20145328《网络对抗》Web安全基础实践

先提交 转载于:https://www.cnblogs.com/rebrust/p/6867017.html

数据结构及算法基础--归并排序(Merge Sort)

在《algorithm》中,作者单独讲mergesort作为一个小节,可以看出它的重要程度。 首先来看一下归并排序的运用场景是怎样的:将两个已排序列进行排列。 主要的思想便是:比较a[i]和b[j]的大小,若a[i]≤b[j],则将…

srand函数简介及用法

srand函数是随机数发生器的初始化函数。其原型是:void srand(unsigned seed); 使用的时候需要提供一个随机数种子,这个随机数种子会对应一个随机数, 如果使用相同的种子后面的rand()函数就会出现一样的随机数。 例如: srand(1…