精华内容
下载资源
问答
  • 精心整理的NGINX面试题
    千次阅读
    2021-10-19 18:54:30
    PHP面试题https://blog.csdn.net/hzbskak/article/details/120852249
    REDIS面试题https://blog.csdn.net/hzbskak/article/details/120852279
    MYSQL面试题https://blog.csdn.net/hzbskak/article/details/120852285
    NGINX面试题https://blog.csdn.net/hzbskak/article/details/120852271

    为什么要用Nginx?

    因为跨平台,配置简单,支持高并发,耗费内存少。

    为什么Nginx性能这么高?

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

    Nginx怎么处理请求的?

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

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

    正向代理:客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端(访问国外网站)

    反向代理:代理服务器来接受请求,然后将请求转发给内网服务器,再将获得的内容返回给客户端。

    反向代理的用途

    • 隐藏服务器真实IP
    • 负载均衡

    正向代理和反向代理的区别

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

    正向代理解决访问限制问题,反向代理解决了高并发问题

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

    1. 轮询:如果有服务器宕机,能够自动剔除
    2. 权重:将服务器性能高的权值设置大点。
    3. ip绑定:使同一ip的访客固定访问一台服务器
    更多相关内容
  • 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面试题

    2021-12-21 09:06:49
    1、请解释一下什么是Nginx? Nginx是一个web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。 2、请列举Nginx的一些特性。 Nginx服务器的特性包括: 反向代理/L7负载均衡器 嵌入式Perl解释器 动态二...

    1、请解释一下什么是Nginx?
    Nginx是一个web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。

    2、请列举Nginx的一些特性。
    Nginx服务器的特性包括:
    反向代理/L7负载均衡器
    嵌入式Perl解释器
    动态二进制升级
    可用于重新编写URL,具有非常好的PCRE支持

    3、请解释Nginx如何处理HTTP请求。
    Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接。

    4、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?
    只需将请求删除的服务器就可以定义为:
    Server{
    listen 80;
    server_name “”;
    return 444;
    }
    这里,服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444被返回,从而终止连接。

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

    6、请列举Nginx服务器的最佳用途。
    Nginx服务器的最佳用法是在网络上部署动态HTTP内容,使用SCGI\WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。

    7、请解释Nginx服务器上的Master和Worker进程分别是什么?
    Master进程:读取及评估配置和维持
    Worker进程:处理请求

    8、请解释你如何通过不同于80的端口开启Nginx?
    为了通过一个不同的端口开启Nginx,必须进入/etc/Nginx/sites_enabled/,如果这是默认文件,那么你必须打开名为“default”的文件。编辑文件,并放置在你想要的端口:
    Like server {listen 81 ;}

    9、请解释是否有可能将Nginx的错误替换为502错误、503?
    502 = 错误网关
    503 = 服务器超载
    有可能,但是您可以确保fastcgi_intercept_errors被设置为ON,并使用错误页面指令。
    Location / {
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_intercept_errors on;
    error_page 502 = 503/error_page.html;
    }

    10、在Nginx中,解释如何在URL中保留双斜线?
    要在URL中保留双斜线,就必须使用merge_slashes_off;
    语法:merge_slashes [on/off]
    默认值:merge_slashes on
    环境:http,server

    11、请解释ngx_http_upstream_module的作用是什么?
    ngx_http_upostream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。

    12、请解释什么是C10K问题?
    C10K问题是指无法同事处理大量客户端(10,000)的网络套接字。

    13、请陈述stub_status和sub_filter指令的作用是什么?
    Stub_status指令:该指令用于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数
    Sub_filter指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据。

    14、解释Nginx是否支持将请求压缩到上游?
    您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持"gzip"编码方法的客户机或服务器使用"内容编码:gzip"来解压压缩响应。

    15、解释如何在Nginx中获得当前的时间?
    要获得Nginx的当前时间,必须使用SSI模块、 d a t e g m t 和 date_gmt和 dategmtdate_local的变量。
    Proxy_set_header THE-TIME $date_gmt;

    16、用Nginx服务器解释-s的目的是什么?
    用于运行Nginx -s参数的可执行文件。

    17、解释如何在Nginx服务器上添加模块?
    在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时间选择

    展开全文
  • Nginx面试题(总结最全面的面试题!!!)

    万次阅读 多人点赞 2020-04-11 23:08:48
    文章目录什么是Nginx?为什么要用Nginx?为什么Nginx性能这么高?Nginx怎么处理请求的?什么是正向代理和反向代理?使用“反向代理服务器的优点是什么?Nginx的优缺点?Nginx应用场景?Nginx目录结构有哪些?Nginx...

    什么是Nginx?

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

    为什么要用Nginx?

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

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

    • 使用Nginx的话还能:

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

    为什么Nginx性能这么高?

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

    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区块结果
    

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

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

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

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

    Nginx的优缺点?

    • 优点:

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

    Nginx应用场景?

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

    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                       # 临时目录
    

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

    Nginx静态资源?

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

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

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

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

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

    限流怎么做的?

    • 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是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。接下来我们来看看两个算法的介绍:

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

    漏桶算法

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

    令牌桶算法

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

    在这里插入图片描述

    为什么要做动静分离?

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

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

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

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

    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
      
    5. 打开浏览器 输入 server_name/image/1.jpg 就可以访问该静态图片了

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

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

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

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

    怎么限制浏览器访问?

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

    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相同。
    展开全文
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    万次阅读 多人点赞 2019-12-12 15:04:43
    Tomcat面试题 1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种...
  • 史上最全Nginx面试题及答案

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

    2021-04-19 22:08:03
    Nginx面试专栏 1、请解释一下什么是 Nginx? Nginx 是一个 web 服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3和 IMAP 协议。 2、请列举 Nginx 的一些特性。 Nginx 服务器的特性包括: 1.反向代理/L7 负载...
  • 解释如何在 Nginx 中获得当前的时间? 用 Nginx 服务器解释-s 的目的是什么? 解释 Nginx 是否支持将请求压缩到上游?
  • Nginx面试题.zip

    2021-09-26 22:10:50
    Nginx面试题.zip
  • 2021-05-15 Nginx面试题

    万次阅读 2021-05-15 20:41:24
    Nginx面试题 1.什么是Nginx? Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:...
  • nginx面试题
  • 面试官:关于负载均衡你了解多少,知道哪些常用框架? 问题分析: 工作中小编也会经常接触到 Nginx,比如美团的 Oceanus 框架,是一...Oceanus ,Nginx 知识肯定是必不可少的,我想这也是我在面试中被问及 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面试题!.zip
  • 18道非常牛逼的Nginx面试题!.pdf
  • 【面试资料】-(机构内训资料)Nginx面试题
  • Nginx常见面试题及详细答案

    千次阅读 2021-05-15 13:05:31
    本章节记录了一些常见的 Nginx 面试题及详细答案,目录如下:   Nginx优缺点 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务,也是一个 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量...
  • 高性能架构面试题系列:Nginx+ActiveMQ+RabbitMQ+Kafka 请解释Nginx如何处理HTTP请求。 Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并...
  • Nginx 面试题

    2019-12-22 10:42:16
    1、什么是Nginx Nginx是一个高性能的反向代理服务器,他是一个非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发 2、为什么要用Nginx 跨平台、配置简单、方向代理、高并发连接:...
  • 工作中掌握Nginx的重要性 自 Nginx 发布之后,就因其高性能迅速的在 Web 服务器市场攻城略地,现在已经和老牌服务器 Apache 旗鼓相当,并且优势还在不断扩大。这主要得益于 Nginx 在性能、稳定性、可扩展配置简单、...
  • Nginx面试题及答案

    千次阅读 2020-07-15 16:49:05
    Nginx是什么? Nginx (engine x) 是一个由c语音编写的高性能的HTTP和反向代理web服务器 可以用来做什么? 1、 http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。 2、 虚拟主机。可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,797
精华内容 11,518
关键字:

nginx面试题