精华内容
下载资源
问答
  • nginx面试题
    千次阅读
    2022-05-07 13:25:27

    什么是Nginx

    Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。

    为什么要用Nginx

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

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

    3、使用Nginx的话还能:

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

    为什么Nginx性能这么高?

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

    什么是正向代理和反向代理?

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

    Nginx的优缺点?

    优点:

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

    缺点:

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

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

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

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

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

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

    轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
    权重 weight weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
    ip_hash( IP绑定) 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

    fair(第三方插件) 必须安装upstream_fair模块。

    对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。哪个服务器的响应速度快,就将请求分配到那个服务器上。

    url_hash(第三方插件) 必须安装Nginx的hash软件包

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

    Nginx 是如何实现高并发的?

    异步,非阻塞,使用了epoll 和大量的底层代码优化。

    如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数。正常情况下,会有很多进程一直在等待中。

    而nginx采用一个master进程,多个woker进程的模式。

    • master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。
    • 同时master进程也负责监控woker的状态,保证高可靠性
    • woker进程一般设置为跟cpu核心数一致。nginx的woker进程在同一时间可以处理的请求数只受内存限制,可以处理多个请求。

    Nginx 的异步非阻塞工作方式正把当中的等待时间利用起来了。在需要等待的时候,这些进程就空闲出来待命了,因此表现为少数几个进程就解决了大量的并发问题。

    限流怎么做的?

    Nginx限流就是限制用户请求速度,防止服务器受不了
    限流有3种:
    1、正常限制访问频率(正常流量)
    2、突发限制访问频率(突发流量)
    3、限制并发连接数

    正常限制访问频率(正常流量):

    限制一个用户发送的请求,我Nginx多久接收一个请求。

    Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。

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

    1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。

    突发限制访问频率(突发流量):

    限制一个用户发送的请求,我Nginx多久接收一个。

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

    上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数:

    为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就漏掉不接受你的请求

    限制并发连接数

    Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下:

    	http {
    		limit_conn_zone $binary_remote_addr zone=myip:10m;
    		limit_conn_zone $server_name zone=myServerName:10m;
    	}
    
        server {
            location / {
                limit_conn myip 10;
                limit_conn myServerName 100;
                rewrite / http://www.lijie.net permanent;
            }
        }
    

    上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。接下来我们来看看两个算法的介绍:

    Nginx处理HTTP请求过程

    1、Read Request Headers:解析请求头。

    2、Identify Configuration Block:识别由哪一个 location 进行处理,匹配 URL。

    3、Apply Rate Limits:判断是否限速。例如可能这个请求并发的连接数太多超过了限制,或者 QPS 太高。

    4、Perform Authentication:连接控制,验证请求。例如可能根据 Referrer 头部做一些防盗链的设置,或者验证用户的权限。

    5、Generate Content:生成返回给用户的响应。为了生成这个响应,做反向代理的时候可能会和上游服务(Upstream Services)进行通信,然后这个过程中还可能会有些子请求或者重定向,那么还会走一下这个过程(Internal redirects and subrequests)。

    6、Response Filters:过滤返回给用户的响应。比如压缩响应,或者对图片进行处理。

    7、Log:记录日志

    Nginx限制IP访问配置

    屏蔽单个ip访问
    # 格式: deny ip;
    deny 123.68.23.5;
    
    允许单个ip访问
    # 格式: allow ip;
    allow 123.68.25.6;
    
    屏蔽所有ip访问
    deny all;
    
    允许所有ip访问
    allow all;
    
    屏蔽ip段访问
    # deny ip/mask
    # 屏蔽172.12.62.0172.45.62.255访问的命令 
    deny 172.12.62.0/24;
    
    允许ip段访问
    # allow ip/mask
    # 屏蔽172.102.0.0172.102.255.255访问的命令 
    allow 172.102.0.0/16;
    
    配置说明

    可新建一个配置文件,如 blockip.conf。在其中编写相关的 ip 限制语句,然后在 nginx.conf 中加入如下配置:

    # 配置ip限制策略
    include blockip.conf; 
    

    nginx 会根据配置文件中的语句,从上至下依次判断。因此,写在前面的语句可能会屏蔽后续的语句。除部分 ip 白名单外,屏蔽所有 ip 的错误示例:

    deny all; # 该语句已经禁止所有ip的访问,后续的配置不会生效
    allow 123.45.25.6;
    allow 123.68.52.125;
    allow 123.125.25.106;
    

    正确示例:

    # 允许部分ip访问
    allow 123.45.25.6;
    allow 123.68.52.125;
    allow 123.125.25.106;
    # 禁止其余ip访问
    deny all; 
    
    更多相关内容
  • 18道非常牛逼的Nginx面试题!.zip
  • nginx面试题

    2022-02-22 10:30:53
    1、什么是NginxNginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、...

    1、什么是Nginx?
    Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。


    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就是实际地址

     server {            						    # 第一个Server区块开始,表示一个独立的虚拟主机站点
            listen       80;      					# 提供服务的端口,默认80
            server_name  localhost;       			# 提供服务的域名主机名
            location / {            				# 第一个location区块开始
                root   html;       				# 站点的根目录,相当于Nginx的安装目录
                index  index.html index.htm;      	# 默认的首页文件,多个用空格分开
            }          								# 第一个location区块结果


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


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

    7、Nginx的优缺点?
    优点:

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

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

    8、Nginx应用场景?

    1. http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
    2. 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
    3. 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
    4. nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

    9、Nginx目录结构有哪些?

    [root@localhost ~]# tree /usr/local/nginx
    /usr/local/nginx
    ├── client_body_temp
    ├── conf                             # Nginx所有配置文件的目录
    │   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
    │   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
    │   ├── fastcgi_params               # fastcgi的参数文件
    │   ├── fastcgi_params.default       
    │   ├── koi-utf
    │   ├── koi-win
    │   ├── mime.types                   # 媒体类型
    │   ├── mime.types.default
    │   ├── nginx.conf                   # Nginx主配置文件
    │   ├── nginx.conf.default
    │   ├── scgi_params                  # scgi相关参数文件
    │   ├── scgi_params.default  
    │   ├── uwsgi_params                 # uwsgi相关参数文件
    │   ├── uwsgi_params.default
    │   └── win-utf
    ├── fastcgi_temp                     # fastcgi临时数据目录
    ├── html                             # Nginx默认站点目录
    │   ├── 50x.html                     # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
    │   └── index.html                   # 默认的首页文件
    ├── logs                             # Nginx日志目录
    │   ├── access.log                   # 访问日志文件
    │   ├── error.log                    # 错误日志文件
    │   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
    ├── proxy_temp                       # 临时目录
    ├── sbin                             # Nginx命令目录
    │   └── nginx                        # Nginx的启动命令
    ├── scgi_temp                        # 临时目录
    └── uwsgi_temp                       # 临时目录


    10、Nginx配置文件nginx.conf有哪些属性模块?

    worker_processes  1;                					# worker进程的数量
    events {                              					# 事件区块开始
        worker_connections  1024;            				# 每个worker进程支持的最大连接数
    }                                    					# 事件区块结束
    http {                               					# HTTP区块开始
        include       mime.types;            				# Nginx支持的媒体类型库文件
        default_type  application/octet-stream;     		# 默认的媒体类型
        sendfile        on;       							# 开启高效传输模式
        keepalive_timeout  65;       						# 连接超时
        server {            								# 第一个Server区块开始,表示一个独立的虚拟主机站点
            listen       80;      							# 提供服务的端口,默认80
            server_name  localhost;       					# 提供服务的域名主机名
            location / {            						# 第一个location区块开始
                root   html;       						# 站点的根目录,相当于Nginx的安装目录
                index  index.html index.htm;      			# 默认的首页文件,多个用空格分开
            }          										# 第一个location区块结果
            error_page   500502503504  /50x.html;     		# 出现对应的http状态码时,使用50x.html回应客户
            location = /50x.html {          				# location区块开始,访问50x.html
                root   html;      							# 指定对应的站点目录为html
            }
        }  
        ......


    11、Nginx静态资源?
    静态资源访问,就是存放在nginx的html页面,我们可以自己编写

    12、如何用Nginx解决前端跨域问题?
    使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。

    13、Nginx虚拟主机怎么配置?

    • 基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
    • 基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
    • 基于ip的虚拟主机。

    14、基于虚拟主机配置域名
    需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件;

    #当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
        server {
            listen       80;
            server_name  www.lijie.com;
            location / {
                root   data/www;
                index  index.html index.htm;
            }
        }
    
    	#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件
    	 server {
            listen       80;
            server_name  bbs.lijie.com;
            location / {
                root   data/bbs;
                index  index.html index.htm;
            }
        }


    15、基于端口的虚拟主机
    使用端口来区分,浏览器使用域名或ip地址:端口号 访问

    #当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
    	 server {
            listen       8080;
            server_name  8080.lijie.com;
            location / {
                root   data/www;
                index  index.html index.htm;
            }
        }
    	
    	#当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
    	server {
            listen       80;
            server_name  www.lijie.com;
            location / {
    		 	proxy_pass http://127.0.0.1:8080;
                index  index.html index.htm;
            }
    	}
    


    16、location的作用是什么?
    location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

    补充:

    Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器。

    17、location的语法能说出来吗?



    18、Location正则案例
    示例:

        #优先级1,精确匹配,根路径
        location =/ {
            return 400;
        }
    
        #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
        location ^~ /av {
           root /data/av/;
        }
    
        #优先级3,区分大小写的正则匹配,匹配/media*****路径
        location ~ /media {
              alias /data/static/;
        }
    
        #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
        location ~* .*\.(jpg|gif|png|js|css)$ {
           root  /data/av/;
        }
    
        #优先7,通用匹配
        location / {
            return 403;
        }
    

    19、限流怎么做的?
    Nginx限流就是限制用户请求速度,防止服务器受不了。

    限流有3种:

    • 正常限制访问频率(正常流量)
    • 突发限制访问频率(突发流量)
    • 限制并发连接数

    Nginx的限流都是基于漏桶流算法。

    20、实现三种限流算法

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

    Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。

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

    1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。


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

    上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数:

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

    为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就漏掉不接受你的请求


    3、 限制并发连接数
    Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下:

        http {
    		limit_conn_zone $binary_remote_addr zone=myip:10m;
    		limit_conn_zone $server_name zone=myServerName:10m;
    	}
    
        server {
            location / {
                limit_conn myip 10;
                limit_conn myServerName 100;
                rewrite / http://www.lijie.net permanent;
            }
        }

    上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。接下来我们来看看两个算法的介绍:

    21、漏桶流算法和令牌桶算法
    (1)漏桶算法
    漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚才的案例:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。

    (2)令牌桶算法
    令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌桶。

    22、为什么要做动静分离?

    • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
    • 让静态的资源只走静态资源服务器,动态的走动态的服务器。
    • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
    • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
      若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

    23、Nginx怎么做的动静分离?
    只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下:(操作都是在Linux上)
            location /image/ {
                root   /usr/local/static/;
                autoindex on;
            }

    (1)创建目录
            mkdir /usr/local/static/image
    (2)进入目录
            cd  /usr/local/static/image
    (3)放一张照片上去#
            1.jpg
    (4)重启 nginx
            sudo nginx -s reload

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

    24、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; 


    25、Nginx配置高可用性怎么配置?
    当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用

    Nginx配置代码:

    server {
            listen       80;
            server_name  www.lijie.com;
            location / {
    		    ### 指定上游服务器负载均衡服务器
    		    proxy_pass http://backServer;
    			###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
    			proxy_connect_timeout 1s;
    			###nginx发送给上游服务器(真实访问的服务器)超时时间
                proxy_send_timeout 1s;
    			### nginx接受上游服务器(真实访问的服务器)超时时间
                proxy_read_timeout 1s;
                index  index.html index.htm;
            }
        }
    

    26、Nginx怎么判断别IP不可访问?
          # 如果访问的ip地址为192.168.9.115,则返回403
         if  ($remote_addr = 192.168.9.115) {  
             return 403;  
         }  


    27、怎么限制浏览器访问?
        ## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
         if ($http_user_agent ~ Chrome) {   
            return 500;  
        }


    28、Rewrite全局变量是什么?

    参考: Nginx面试题(总结最全面的面试题!!!)_小杰爱吃蛋的博客-CSDN博客_nginx面试题

    展开全文
  • 什么是Nginx?2. 为什么要用Nginx?3. 为什么Nginx性能这么高?4. Nginx怎么处理请求的?5. 什么是正向代理和反向代理?6. 使用“反向代理服务器的优点是什么?7. Nginx的优缺点?8. Nginx应用场景?9. Nginx目录...

    1. 什么是Nginx?

    • Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他
      可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例
      如:新浪、网易、 腾讯等。

    2. 为什么要用Nginx?

    • 跨平台、配置简单、方向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,
      内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少,
    • 而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不
      会发送到宕机的服务器了。重新将请求提交到其他的节点上。
    • 使用Nginx的话还能:
      1. 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
      2. 稳定性高:宕机的概率非常小
      3. 接收用户请求是异步的

    3. 为什么Nginx性能这么高?

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

    4. Nginx怎么处理请求的?

    • nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的
      location,location就是实际地址
    server { # 第一个Server区块开始,表示一个独立的虚拟主机站点
    	listen 80; # 提供服务的端口,默认80
    	server_name localhost; # 提供服务的域名主机名
    	location / { # 第一个location区块开始
    		root html; # 站点的根目录,相当于Nginx的安装目录
    		index index.html index.htm; # 默认的首页文件,多个用空格分开
    	} # 第一个location区块结果
    }
    

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

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

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

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

    7. Nginx的优缺点?

    • 优点:
    1. 占内存小,可实现高并发连接,处理响应快
    2. 可实现http服务器、虚拟主机、方向代理、负载均衡
    3. Nginx配置简单
    4. 可以不暴露正式的服务器IP地址
    • 缺点: 动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般
      前端用nginx作为反向代理抗住压力,

    8. Nginx应用场景?

    1. http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
    2. 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
    3. 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要
      用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台
      服务器负载高宕机而某台服务器闲置的情况。
    4. nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

    9. Nginx目录结构有哪些?

    [root@localhost ~]# tree /usr/local/nginx
    /usr/local/nginx
    ├── client_body_temp
    ├── conf # Nginx所有配置文件的目录
    │ ├── fastcgi.conf # fastcgi相关参数的配置文件
    │ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
    │ ├── fastcgi_params # fastcgi的参数文件
    │ ├── fastcgi_params.default
    │ ├── koi-utf
    │ ├── koi-win
    │ ├── mime.types # 媒体类型
    │ ├── mime.types.default
    │ ├── nginx.conf # Nginx主配置文件
    │ ├── nginx.conf.default
    │ ├── scgi_params # scgi相关参数文件
    │ ├── scgi_params.default
    │ ├── uwsgi_params # uwsgi相关参数文件
    │ ├── uwsgi_params.default
    │ └── win-utf
    ├── fastcgi_temp # fastcgi临时数据目录
    ├── html # Nginx默认站点目录
    │ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调
    用此页面
    │ └── index.html # 默认的首页文件
    ├── logs # Nginx日志目录
    │ ├── access.log # 访问日志文件
    │ ├── error.log # 错误日志文件
    │ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写
    到此文件
    ├── proxy_temp # 临时目录
    ├── sbin # Nginx命令目录
    │ └── nginx # Nginx的启动命令
    ├── scgi_temp # 临时目录
    └── uwsgi_temp # 临时目录
    

    10. Nginx配置文件nginx.conf有哪些属性模块?

    worker_processes 1; # worker进程的数量
    events { # 事件区块开始
    	worker_connections 1024; # 每个worker进程支持的最大连接数
    } # 事件区块结束
    http { # HTTP区块开始
    	include mime.types; # Nginx支持的媒体类型库文件
    	default_type application/octet-stream; # 默认的媒体类型
    	sendfile on; # 开启高效传输模式
    	keepalive_timeout 65; # 连接超时
    	server { # 第一个Server区块开始,表示一个独立的虚拟主机站点
    		listen 80; # 提供服务的端口,默认80
    		server_name localhost; # 提供服务的域名主机名
    		location / { # 第一个location区块开始
    			root html; # 站点的根目录,相当于Nginx的安装目录
    			index index.html index.htm; # 默认的首页文件,多个用空格分开
    		} # 第一个location区块结果
    		error_page 500502503504 /50x.html; # 出现对应的http状态码时,使用50x.html回应客户
    		location = /50x.html { # location区块开始,访问50x.html
    			root html; # 指定对应的站点目录为html
    		}
    	}
    }
    

    11. Nginx静态资源?

    • 静态资源访问,就是存放在nginx的html页面,我们可以自己编写

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

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

    13. Nginx虚拟主机怎么配置?

    1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
    2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
    3、基于ip的虚拟主机。

    基于虚拟主机配置域名

    • 需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对
      应域名网站目录下新增index.html文件;
    #当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
    server {
    	listen 80;
    	server_name www.lijie.com;
    	location / {
    		root data/www;
    		index index.html index.htm;
    	}
    }
    #当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件
    server {
    	listen 80;
    	server_name bbs.lijie.com;
    	location / {
    		root data/bbs;
    		index index.html index.htm;
    	}
    }
    

    基于端口的虚拟主机

    • 使用端口来区分,浏览器使用域名或ip地址:端口号 访问
    #当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
    server {
    	listen 8080;
    	server_name 8080.lijie.com;
    	location / {
    		root data/www;
    		index index.html index.htm;
    	}
    }
    #当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
    server {
    	listen 80;
    	server_name www.lijie.com;
    	location / {
    		proxy_pass http://127.0.0.1:8080;
    		index index.html index.htm;
    	}
    }
    

    14. location的作用是什么?

    • location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进
      行匹配,匹配成功即进行相关的操作。

    location的语法能说出来吗?
    注意:~ 代表自己输入的英文字母

    匹配符匹配规则优先级
    =精确匹配1
    ^~以某个字符串开头2
    ~区分大小写的正则匹配3
    ~*不区分大小写的正则匹配4
    !~区分大小写不匹配的正则5
    !~*不区分大小写不匹配的正则6
    /通用匹配,任何请求都会匹配到7

    Location正则案例

    • 示例:
    #优先级1,精确匹配,根路径
    location =/ {
    	return 400;
    }
    
    #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
    location ^~ /av {
    	root /data/av/;
    }
    
    #优先级3,区分大小写的正则匹配,匹配/media*****路径
    location ~ /media {
    	alias /data/static/;
    }
    
    #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
    location ~* .*\.(jpg|gif|png|js|css)$ {
    	root /data/av/;
    }
    
    #优先7,通用匹配
    location / {
    	return 403;
    }
    

    15. 限流怎么做的?

    • Nginx限流就是限制用户请求速度,防止服务器受不了
    • 限流有3种
    1. 正常限制访问频率(正常流量)
    2. 突发限制访问频率(突发流量)
    3. 限制并发连接数
    • Nginx的限流都是基于漏桶流算法,底下会说道什么是桶铜流

    实现三种限流算法
    1、正常限制访问频率(正常流量):

    • 限制一个用户发送的请求,我Nginx多久接收一个请求。
    • Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算
      法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个
      IP的请求处理频率。
    #定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
    #绑定限流维度
    server{
    	location/seckill.html{
    		limit_req zone=zone;
    		proxy_pass http://lj_seckill;
    	}
    }
    
    • 1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,
      Nginx就会拒绝处理该用户请求。

    2、突发限制访问频率(突发流量):

    • 限制一个用户发送的请求,我Nginx多久接收一个。
    • 上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处
      理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合
      nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求
      数。我们可以将之前的例子添加burst参数以及nodelay参数:
    #定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
    #绑定限流维度
    server{
    	location/seckill.html{
    		limit_req zone=zone burst=5 nodelay;
    		proxy_pass http://lj_seckill;
    	}
    }
    
    • 为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表Nginx对于一个用户的请求会立即处
      理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就
      漏掉不接受你的请求

    3、 限制并发连接数

    • Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用
      limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看
      下:
    http {
    	limit_conn_zone $binary_remote_addr zone=myip:10m;
    	limit_conn_zone $server_name zone=myServerName:10m;
    }
    server {
    	location / {
    		limit_conn myip 10;
    		limit_conn myServerName 100;
    		rewrite / http://www.lijie.net permanent;
    	}
    }
    
    • 上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发
      数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会
      计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌
      桶算法实现的。接下来我们来看看两个算法的介绍:

    16. 漏桶流算法和令牌桶算法知道?

    漏桶算法

    • 漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入
      到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形
      以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚
      才的案例:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大
      也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速
      率。

    令牌桶算法

    • 令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制
      发送到网络上的数据的数目,并允许突发数据的发送。Google开源项目Guava中的RateLimiter使
      用的就是令牌桶控制算法。令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率
      源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌
      桶。

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

    • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动
      静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开
      来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
    • 让静态的资源只走静态资源服务器,动态的走动态的服务器
    • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
    • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器
      在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器
      tomcat。 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分
      离。这也是反向代理服务器的一个重要的作用。

    18. Nginx怎么做的动静分离?

    • 只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。
      如下:(操作都是在Linux上)
    location /image/ {
    	root /usr/local/static/;
    	autoindex on;
    }
    
    1. 创建目录
    mkdir /usr/local/static/image
    
    1. 进入目录
    cd /usr/local/static/image
    
    1. 放一张照片上去#
    1.jpg
    
    1. 重启 nginx
    sudo nginx -s reload
    
    1. 打开浏览器 输入 server_name/image/1.jpg 就可以访问该静态图片了

    19. 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;
    }
    

    20. Nginx配置高可用性怎么配置?

    • 当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台
      服务器,保证服务器的高可用
    • Nginx配置代码:
    server {
    	listen 80;
    	server_name www.lijie.com;
    	location / {
    		### 指定上游服务器负载均衡服务器
    		proxy_pass http://backServer;
    		###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
    		proxy_connect_timeout 1s;
    		###nginx发送给上游服务器(真实访问的服务器)超时时间
    		proxy_send_timeout 1s;
    		### nginx接受上游服务器(真实访问的服务器)超时时间
    		proxy_read_timeout 1s;
    		index index.html index.htm;
    	}
    }
    

    21. Nginx怎么判断别IP不可访问?

    # 如果访问的ip地址为192.168.9.115,则返回403
    if ($remote_addr = 192.168.9.115) {
    	return 403;
    }
    

    22. 怎么限制浏览器访问?

    ## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
    if ($http_user_agent ~ Chrome) {
    	return 500;
    }
    

    23. Rewrite全局变量是什么?

    变量含义
    $args这个变量等于请求行中的参数,同$query_string
    $content length请求头中的Content-length字段。
    $content_type请求头中的Content-Type字段。
    $document_root当前请求在root指令中指定的值。
    $host请求主机头字段,否则为服务器名称。
    $http_user_agent客户端agent信息
    $http_cookie客户端cookie信息
    $limit_rate这个变量可以限制连接速率。
    $request_method客户端请求的动作,通常为GET或POST。
    $remote_addr客户端的IP地址。
    $remote_port客户端的端口。
    $remote_user已经经过Auth Basic Module验证的用户名。
    $request_filename当前请求的文件路径,由root或alias指令与URI请求生成。
    $schemeHTTP方法(如http,https)。
    $server_protocol请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    $server_addr服务器地址,在完成一次系统调用后可以确定这个值。
    $server_name服务器名称。
    $server_port请求到达服务器的端口号。
    $request_uri包含请求参数的原始URI,不包含主机名,如”/foo/bar.php?arg=baz”。
    $uri不带请求参数的当前URI,
    $uri不包含主机名,如”/foo/bar.html”。
    $document_uri与$uri相同。

    史上最全Java面试宝典,BAT大厂面试必备。整理不易,建议先关注点赞加收藏

    序号名称地址
    1Java基础面试题(91道含答案)(点击查看)
    2Java并发编程面试题 (123道含答案)(点击查看)
    3Java异常面试题 (33道含答案)(点击查看)
    4Java虚拟机(JVM)面试题(51道含答案)(点击查看)
    5Java集合面试题(52道含答案)(点击查看)
    6Linux面试题(50道含答案)(点击查看)
    7Memcache面试题(23道含答案)(点击查看)
    8Mybatiss面试题 (37道含答案)(点击查看)
    9MySQL面试题(40道含答案)(点击查看)
    10Netty面试题(49道含答案)(点击查看)
    11Nginx面试题(23道含答案)(点击查看)
    12RabbitMQ面试题(22道含答案)(点击查看)
    13Redis面试题(70道含答案)(点击查看)
    14SpringBoot面试题(44道含答案)(点击查看)
    15SpringCloud面试题(49道含答案)(点击查看)
    16SpringMVC面试题(29道含答案)(点击查看)
    17Spring面试题(75道含答案)(点击查看)
    18TCP、UDP、Socket、Http网络编程面试题(47道含答案)(点击查看)
    19Tomcat面试题(15道含答案)(点击查看)
    20Zookeeper面试题(28道含答案)(点击查看)
    21多线程面试题(60道含答案)(点击查看)
    22设计模式面试题(14道含答案)(点击查看)
    23BIO、NIO、AIO、Netty面试题(35道含答案)(点击查看)
    24Dubbo面试题(47道含答案)(点击查看)
    25ElasticSearch面试题(31道含答案)(点击查看)
    26Git常用命令(63条)(点击查看)
    展开全文
  • Nginx面试题总结

    千次阅读 2022-06-08 19:40:38
    为什么要用Nginx?为什么Nginx性能这么高?Nginx怎么处理请求的? 什么是正向代理和反向代理?

    1、什么是Nginx?

    Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。

    2、为什么要用Nginx?

    • 跨平台、配置简单、反向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少
    • 而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
    • 使用Nginx的话还能:

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

    3、为什么Nginx性能这么高?

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

    4、为什么不使用多线程?  

    Nginx:采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换,所以才使得Nginx支持更高的并发。

    5、Nginx怎么处理请求的?

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

    server {            						# 第一个Server区块开始,表示一个独立的虚拟主机站点
        listen       80;      					# 提供服务的端口,默认80
        server_name  localhost;       			# 提供服务的域名主机名
        location / {            				# 第一个location区块开始
            root   html;       				# 站点的根目录,相当于Nginx的安装目录
            index  index.html index.htm;      	# 默认的首页文件,多个用空格分开
        }          								
    }
    

    6、什么是正向代理和反向代理?

    正向代理就是一个人发送一个请求直接就到达了目标的服务器

    反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了

     正向代理服务器代理的是客户端,而反向代理服务器代理的是服务端

    7、使用反向代理服务器的优点是什么?

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

    8、Nginx的优缺点?

    优点:

            (1)占内存小,可实现高并发连接,处理响应快
            (2)可实现http服务器、虚拟主机、方向代理、负载均衡
            (3)Nginx配置简单
            (4)可以不暴露正式的服务器IP地址
    缺点:
            动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力

    9、Nginx应用场景?

    • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
    • 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
    • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
    • nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

    10、Nginx目录结构有哪些?

    [root@localhost ~]# tree /usr/local/nginx
    /usr/local/nginx
    ├── client_body_temp
    ├── conf                             # Nginx所有配置文件的目录
    │   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
    │   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
    │   ├── fastcgi_params               # fastcgi的参数文件
    │   ├── fastcgi_params.default       
    │   ├── koi-utf
    │   ├── koi-win
    │   ├── mime.types                   # 媒体类型
    │   ├── mime.types.default
    │   ├── nginx.conf                   # Nginx主配置文件
    │   ├── nginx.conf.default
    │   ├── scgi_params                  # scgi相关参数文件
    │   ├── scgi_params.default  
    │   ├── uwsgi_params                 # uwsgi相关参数文件
    │   ├── uwsgi_params.default
    │   └── win-utf
    ├── fastcgi_temp                     # fastcgi临时数据目录
    ├── html                             # Nginx默认站点目录
    │   ├── 50x.html                     # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
    │   └── index.html                   # 默认的首页文件
    ├── logs                             # Nginx日志目录
    │   ├── access.log                   # 访问日志文件
    │   ├── error.log                    # 错误日志文件
    │   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
    ├── proxy_temp                       # 临时目录
    ├── sbin                             # Nginx命令目录
    │   └── nginx                        # Nginx的启动命令
    ├── scgi_temp                        # 临时目录
    └── uwsgi_temp                       # 临时目录
    

    11、Nginx配置文件nginx.conf有哪些属性模块?

    worker_processes  1;                					# worker进程的数量
    events {                              					# 事件区块开始
        worker_connections  1024;            				# 每个worker进程支持的最大连接数
    }                                    					# 事件区块结束
    http {                               					# HTTP区块开始
        include       mime.types;            				# Nginx支持的媒体类型库文件
        default_type  application/octet-stream;     		# 默认的媒体类型
        sendfile        on;       							# 开启高效传输模式
        keepalive_timeout  65;       						# 连接超时
        server {            								# 第一个Server区块开始,表示一个独立的虚拟主机站点
            listen       80;      							# 提供服务的端口,默认80
            server_name  localhost;       					# 提供服务的域名主机名
            location / {            						# 第一个location区块开始
                root   html;       						# 站点的根目录,相当于Nginx的安装目录
                index  index.html index.htm;      			# 默认的首页文件,多个用空格分开
            }          										# 第一个location区块结果
            error_page   500502503504  /50x.html;     		# 出现对应的http状态码时,使用50x.html回应客户
            location = /50x.html {          				# location区块开始,访问50x.html
                root   html;      							# 指定对应的站点目录为html
            }
        }  
        ......
    

    12、Nginx虚拟主机怎么配置?

    • 基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
    • 基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台

    • 基于ip的虚拟主机。

       (1)基于虚拟主机配置域名

    需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件;

    	#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
        server {
            listen       80;
            server_name  www.lijie.com;
            location / {
                root   data/www;
                index  index.html index.htm;
            }
        }
    

       (2)基于端口的虚拟主机

    使用端口来区分,浏览器使用域名或ip地址:端口号访问

         #当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
    	 server {
            listen       8080;
            server_name  8080.lijie.com;
            location / {
                root   data/www;
                index  index.html index.htm;
            }
        }
    

       (3)基于ip的虚拟主机

        #当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
    	server {
            listen       80;
            server_name  www.lijie.com;
            location / {
    		 	proxy_pass http://127.0.0.1:8080;
                index  index.html index.htm;
            }
    	}

    13、location的作用是什么?

    location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

         location的语法能说出来吗?

    注意:~ 代表自己输入的英文字母

     

         Location正则案例

    	#优先级1,精确匹配,根路径
        location =/ {
            return 400;
        }
    
        #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
        location ^~ /av {
           root /data/av/;
        }
    
        #优先级3,区分大小写的正则匹配,匹配/media*****路径
        location ~ /media {
              alias /data/static/;
        }
    
        #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
        location ~* .*\.(jpg|gif|png|js|css)$ {
           root  /data/av/;
        }
    
        #优先7,通用匹配
        location / {
            return 403;
        }
    

    14、限流怎么做的?

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

    • 限流有3种

      1. 正常限制访问频率(正常流量)
      2. 突发限制访问频率(突发流量)
      3. 限制并发连接数
    • Nginx的限流都是基于漏桶流算法,底下会说道什么是桶铜流

     实现三种限流算法

    (1)正常限制访问频率(正常流量):

    • 限制一个用户发送的请求,我Nginx多久接收一个请求。
    • Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。
    	#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
    
    	#绑定限流维度
    	server{
    		
    		location/seckill.html{
    			limit_req zone=zone;	
    			proxy_pass http://lj_seckill;
    		}
    
    	}
    

     1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求

     (2)突发限制访问频率(突发流量):

    • 限制一个用户发送的请求,我Nginx多久接收一个。
    • 上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数:
    	#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
    
    	#绑定限流维度
    	server{
    		
    		location/seckill.html{
    			limit_req zone=zone burst=5 nodelay;
    			proxy_pass http://lj_seckill;
    		}
    
    	}
    

    为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就漏掉不接受你的请求

     (3)限制并发连接数

    Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下:

    	http {
    		limit_conn_zone $binary_remote_addr zone=myip:10m;
    		limit_conn_zone $server_name zone=myServerName:10m;
    	}
    
        server {
            location / {
                limit_conn myip 10;
                limit_conn myServerName 100;
                rewrite / http://www.lijie.net permanent;
            }
        }
    

    上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。

    15、漏桶流算法和令牌桶算法知道?
    (1)漏桶算法

    漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚才的案例:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率

     

    (2)令牌桶算法

    令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌桶。


     

    16、为什么要做动静分离?

    • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
    • 让静态的资源只走静态资源服务器,动态的走动态的服务器
    • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
    • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
    • 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

         Nginx怎么做的动静分离?

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

     server{
         listen 80;
         server_name ws.licaidie.top;
            
         location /image/ {
             root   /usr/local/static/;
             autoindex on;
        }
    }
    

    (1)创建目录

    mkdir /usr/local/static/image

    (2)进入目录

    cd  /usr/local/static/image

    (3)放一张照片上去

    1.jpg

    (4)重启 nginx

    sudo nginx -s reload

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

    17、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; 
    } 

    18、Nginx配置高可用性怎么配置?

    当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮询到下一台服务器,保证服务器的高可用

    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            ### 指定上游服务器负载均衡服务器
            proxy_pass http://backServer;
            ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
            proxy_connect_timeout 1s;
            ###nginx发送给上游服务器(真实访问的服务器)超时时间
            proxy_send_timeout 1s;
            ### nginx接受上游服务器(真实访问的服务器)超时时间
            proxy_read_timeout 1s;
            index  index.html index.htm;
        }
    }

    19、Rewrite全局变量是什么?

    20、nginx是如何实现高并发的?

    简单来讲,就是: 异步,非阻塞,使用了epoll和大量的底层代码优化
    nginx采用一个master进程,多个woker进程的模式。
    1. master进程主要负责收集、分发请求。当一个请求过来时,master拉起一个worker进程负责处理这个请求。
    2. master进程也要负责监控woker的状态,保证高可靠性
    3. woker进程一般设置为跟cpu核心数一致。nginx的woker进程跟apache不一样。apche的进程在同一时间只能处理一个请求,所以它会开很多个进程,几百甚至几千个。而nginx的woker进程在同一时间可以处理额请求数只受内存限制,因此可以处理多个请求。

    21、nginx的四大功能是什么?

    • 正向代理        在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
    • 反向代理        我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端
      此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
    • 负载均衡        单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器
      上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
    • 动静分离       为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力

    22、nginx和apache的区别?

    • 轻量级:同样起web 服务,nginx 比apache 占用更少的内存及资源;
    • 抗并发:nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能;
    • 模块化:nginx编写模块相对简单;
    • IO事件模型:apache是同步多进程模型,一个连接对应一个进程,阻塞;nginx是异步的,多进程单线程,异步非阻塞,多个连接(万级别)可以对应一个进程。
    • 功能丰富:Nginx提供负载均衡,可以做反向代理,前端服务器

     23、Nginx 常用命令有哪些?

    • 启动        nginx 。
    • 停止        nginx -s stop nginx -s quit
    • 重启        nginx -s reload service nginx reload
    • 重载指定配置文件  .nginx -c /usr/local/nginx/conf/nginx.conf
    • 查看        nginx 版本 nginx -v

    24、nginx报500、502、503、504 有什么区别?

    • 500: Internal Server Error 内部服务错误,比如脚本错误,编程语言语法错误。
    • 502: Bad Gateway错误,网关错误。比如服务器当前连接太多,响应太慢,页面素材太多、带宽慢。
    • 503: Service Temporarily Unavailable,服务不可用,web服务器不能处理HTTP请求,ip超频访问导致限流,或者 临时超载或者是服务器进行停机维护。
    • 504: Gateway timeout 网关超时,程序执行时间过长导致响应超时,例如程序需要执行20秒,而nginx最大响应等待时间为10秒,这样就会出现超时。

    25、什么是C10K问题?

    所谓c10k问题,指的是: 服务器如何支持10k个并发连接,也就是concurrent 10000 connection(这也是c10k这个名字的由来), C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。

     解决方案 :详细请看:C10k问题简述_爱思考的实践者的博客-CSDN博客_c10k问题

    • 为每个连接分配一个独立的线程/进程。
    • 同一个线程/进程同时处理多个连接(IO多路复用)

     26、nginx的七层负载均衡

    四层负载均衡


    所谓四层负载均衡是指OSI七层模型中的传输层, 那么传输层Nginx已经支持TCP/IP的控制, 所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载, 那么他的好处是性能非常快, 只需要底层进行应用处理,而不需要进行一些复杂的逻辑. 

    七层负载均衡


    七层负载均衡是在应用层,那么他可以完成后很多应用方面的协议请求,
    当然四层有四层的好处,七层七层的好处,四层就不支持协议的转发,(http,https,DNS等)只支持IP,但是它的速度快.
    应用层虽然没有四层负载快,但是支持很多功能,比如说他支持http信息的改写、头部信息的改写、(意识是,七层代理着用户往后请求的时候把我们用户请求的头部信息加上,长连接协议也可以修改等)、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等一些规则,所以在应用层的服务里面,可以做的内容就更多了。Nginx是一个典型的七层负载均衡

    四层和七层的区别


    四层负载均衡数据在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发,由此可以看出,七层负载均衡效率没有四层负载均衡高。
    但是七层负载均衡更贴近于服务,如HTTP协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配,head头改写等等,这些都是四层负载均衡无法实现的。

    注意:四层负载均衡不识别域名,七层负载均衡识别域名

     OSI七层模型

    从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

    • 应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
    • 表示层:数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
    • 会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
    • 传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
    • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
    • 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
    • 物理层:建立、维护、断开物理连接。

     OSI七层模型详解_M10++的博客-CSDN博客_osi七层模型

    展开全文
  • Nginx面试题整理

    千次阅读 2022-07-22 20:03:44
    Nginx面试题整理
  • Nginx面试题 23道1

    2022-08-04 00:46:31
    2. 为什么要用Nginx 1. 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存 2. 稳定性高:宕机的概率非常小 3. 接收用户请求是异步的 3. 为什么
  • 精心整理的NGINX面试题

    千次阅读 2021-10-19 18:54:30
    为什么要用Nginx? 因为跨平台,配置简单,支持高并发,耗费内存少。 为什么Nginx性能这么高? 因为nginx是异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决 Nginx怎么处理请求的? nginx接受一...
  • Nginx面试题(总结最全面的面试题!!!)

    万次阅读 多人点赞 2020-04-11 23:08:48
    文章目录什么是Nginx?为什么要用Nginx?为什么Nginx性能这么高?Nginx怎么处理请求的?什么是正向代理和反向代理?使用“反向代理服务器的优点是什么?Nginx的优缺点?Nginx应用场景?Nginx目录结构有哪些?Nginx...
  • Nginx有哪些优点?Nginx应用场景? Nginx怎么处理请求的? Nginx是如何实现高并发的?什么是正向代理? 什么是反向代理? 反向代理服务器的优点是什么?Nginx目录结构有哪些? 牛nginx..conf有哪些属性模块? cookie和session...
  • nginx面试题及详解

    2021-04-19 22:08:03
    Nginx面试专栏 1、请解释一下什么是 Nginx? Nginx 是一个 web 服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3和 IMAP 协议。 2、请列举 Nginx 的一些特性。 Nginx 服务器的特性包括: 1.反向代理/L7 负载...
  • Nginx面试题.zip

    2021-09-26 22:10:50
    Nginx面试题.zip
  • 史上最全Nginx面试题及答案

    千次阅读 2020-06-22 11:41:42
    1.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而...
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    万次阅读 多人点赞 2019-12-12 15:04:43
    Tomcat面试题 1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种...
  • Nginx面试题,都是来自工作中的笔记
  • https://blog.csdn.net/qq_35393693/article/details/86647661 https://blog.csdn.net/qq_25934401/article/details/81536958 https://www.jianshu.com/p/2f4a2bca088c ...
  • 18道非常牛逼的Nginx面试题!.pdf
  • 【面试资料】-(机构内训资料)Nginx面试题
  • Nginx常见面试题及详细答案

    万次阅读 2021-05-15 13:05:31
    本章节记录了一些常见的 Nginx 面试题及详细答案,目录如下:   Nginx优缺点 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务,也是一个 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量...
  • 2021-05-15 Nginx面试题

    万次阅读 2021-05-15 20:41:24
    Nginx面试题 1.什么是Nginx? Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:...
  • nginx反向代理超时时间 location匹配优先级顺序 Nginx与Apache的区别 Apache相对于Nginx的优势: Nginx健康检查机制 Nginx的调优 请解释 Nginx 服务器上的 Master 和 Worker 进程分别是什么? 漏桶流算法和令牌桶...
  • 内存消耗小:开启 10 个 Nginx 才占 150M 内存。 成本低廉,且开源。 稳定性高,宕机的概率非常小。 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,967
精华内容 12,386
关键字:

nginx面试题