Nginx面试题


1.请解释一下什么是Nginx ?

Nginx是一个web服务器和反向代理服务器,用于 HTTP 、 HTTPS 、 SMTP 、 POP3 和 IMAP 协议。

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

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

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

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

4.请列举Nginx 的一些特性。

Nginx 服务器的特性包括:

  • 反向代理/L7负载均衡器
  • 嵌入式Perl解释器
  • 动态二进制升级
  • 可用于重新编写URL,具有非常好的PCRE支持

5.Nginx的优缺点?

优点:

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

缺点:

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

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

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

7.Nginx应用场景?

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

8.请解释Nginx服务器上的Master和Worker进程分别是什么?

Master进程:读取及评估配置和维持

Worker进程:处理请求

9.请解释你如何通过不同于80的端口开启Nginx?

为了通过一个不同的端口开启Nginx,你必须进入/etc/Nginx/sites-enabled/,如果这是默认文件,那么 你必须打开名为“default”的文件。编辑文件,并放置在你想要的端口:

Like server { listen 81; }

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

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

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

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

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

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

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

  目录