当前位置 博文首页 > 小杰爱吃蛋的博客:Nginx 面试题

    小杰爱吃蛋的博客:Nginx 面试题

    作者:[db:作者] 时间:2021-09-20 19:26

    1、什么是Nginx

    Nginx是一个高性能的反向代理服务器,他是一个非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发

    2、为什么要用Nginx

    跨平台、配置简单、方向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少,

    而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。

    使用Nginx的话还能:
    节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
    稳定性高:宕机的概率非常小
    接收用户请求是异步的

    3、为什么Nginx性能这么高

    因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决

    4.Nginx怎么处理请求的

    nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址

    5.什么是正向代理和反向代理

    1、正向代理就是一个人发送一个请求直接就到达了目标的服务器
    2、反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规 则分发给了后端的业务处理服务器进行处理了

    6.使用“反向代理服务器的优点是什么?

    反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。

    7.Nginx的优缺点

    优点:
    1.占内存小,可实现高并发连接,处理响应快
    2.可实现http服务器、虚拟主机、方向代理、负载均衡
    3.Nginx配置简单
    4.可以不暴露正式的服务器IP地址

    缺点:
    动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,

    8.如何用Nginx解决前端跨域问题?

    使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。

    9 .限流怎么做的,算法是什么,(限制请求速度)

    Nginx限流就是限制用户请求速度,防止服务器受不了

    限流有3种,我这只写了最平常的一种(限制访问频率(正常流量))
    1、限制访问频率(正常流量)
    2、限制访问频率(突发流量)
    3、限制并发连接数

    1、限制访问频率(正常流量):限制一个用户发送的请求,我Nginx多久接收一个。

    	#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
    
    	#绑定限流维度
    	server{
    		
    		location/seckill.html{
    			limit_req zone=one		
    			proxy_pass http://lj_seckill;
    		}
    
    	}
    

    1r/s代表1秒一个请求 1r/m一分钟接收一个请求

    (此流也叫做漏桶流,多余的请求全部不要,漏掉)
    在这里插入图片描述


    10.为什么要做动静分离?

    Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。

    让静态的资源只走静态资源服务器,动态的走动态的服务器

    Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。

    对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
    若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

    11.怎么做的动静分离

    只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下:(操作都是在Linux上)

    location /image/ {
                root   /usr/local/static/;
                autoindex on;
            }
    

    1、创建目录
    mkdir /usr/local/static/image
    2、进入目录
    cd /usr/local/static/image
    3、放一张照片上去#
    ls
    1.jpg

    4、重启 nginx
    sudo nginx -s reload

    5、打开浏览器 输入 server_name/image/1.jpg 就可以访问该静态图片了

    12、Nginx负载均衡的算法怎么实现的?策略有哪些?

    为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

    Nginx负载均衡实现的策略有以下五种:

    (1) 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

    upstream backserver {
    server 192.168.0.12;
    server 192.168.0.13;
    }

    (2) 权重 weight

    weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

    upstream backserver {
    server 192.168.0.12 weight=2;
    server 192.168.0.13 weight=8;
    }
    权重越高,在被访问的概率越大,如上例,分别是20%,80%。

    (3) ip_hash( IP绑定)

    每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

    upstream backserver {
    ip_hash;
    server 192.168.0.12:88;
    server 192.168.0.13:80;
    }

    (4) fair(第三方插件)

    必须安装upstream_fair模块。

    对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。

    upstream backserver {
    server server1;
    server server2;
    fair;
    }
    哪个服务器的响应速度快,就将请求分配到那个服务器上。

    (5) url_hash(第三方插件)

    必须安装Nginx的hash软件包

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

    upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
    }

    cs