Web应用面试题
nginx\lvs\haproxy\keeplivd\等等~~~
1.nginx反向代理
答: 反向代理是指代理服务器接收客户端的请求,然后将请求转发到内部网络的一个或多个服务器上,并将从服务器上得到的响应返回给客户端。Nginx 作为反向代理时可以提供负载均衡、SSL终结、缓存静态内容、压缩和优化内容等功能。
如何实现:proxy_pass模块
2.什么是负载均衡,nginx如何实现的?
答: 负载均衡是分散来自客户端的请求到多个服务器上,以达到优化资源使用、最大化吞吐量、最小化响应时间和避免任何单一点故障的效果。Nginx 实现负载均衡通常是通过 upstream 模块,定义一个服务器组,并使用不同的负载均衡策略(如轮询、最少连接、IP哈希等)来分散请求。
如何实现:proxy_pass模块,upstream模块。
3.nginx是如何处理请求的?
答: Nginx 使用基于事件的模型和非阻塞的方式来处理请求。客户端的请求首先由 master 进程接收,然后 master 进程根据配置分配给一个或多个 worker 进程。worker 进程监听端口并接受新的请求,处理请求,并将结果返回给客户端。
4.nginx正向代理和反向代理的区别?
首先:正向代理是代理的客户段,反向代理是代理的服务端。
正向代理:访问原来无法访问的资源,譬如vpn?翻墙?通过proxy 代理。
反向代理:在使用反向代理时,客户端向一个服务器发送请求,而实际上该请求会被转发到后端的多个真实服务器(也称为上游服务器),然后由反向代理服务器来处理请求并将结果返回给客户端。
客户端不直接与后端服务器进行通信,而是与反向代理服务器进行通信,隐藏了后端服务器的 IP 地址。
反向代理的主要作用是提供负载均衡和高可用性。
5.nginx如何优化?
- nginx worker进程数
- nginx 最大连接数
- 压缩优化:gzip
- 开启缓存加速:如缓存静态文件,反向代理缓存。
- tcp timeout长连接优化
- 优化负载均衡
6.常见的http 状态码
200(成功) - 服务器成功返回网页
201(已创建) - 请求成功并且服务器创建了新的资源。
304(未修改) - 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
400(错误请求) - 服务器不理解请求的语法。
401(未授权)- 请求要求身份验证。
404(未找到) - 请求的资源不存在。
500(服务器内部错误) - 服务器遇到错误,无法完成请求。
502(错误网关)- 服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用)- 服务器目前无法使用(由于超载或停机维护)。
7.nginx 高可用
- 使用负载均衡器:可以通过硬件负载均衡器(如 F5 等)或软件负载均衡器(如 HAProxy 等)与 Nginx 配合,实现多台 Nginx 服务器的负载均衡和故障转移。
- 双机热备:利用 Keepalived 等工具实现双机热备,将两台 Nginx 服务器组成一个热备组,其中一台为主,一台为备,自动进行故障切换。
- 分布式部署:将 Nginx 部署在多个节点上,通过分布式系统的机制来保障整体的可用性。
8.nginx负载均衡算法
- 轮询(默认)
- 每个请求按时间顺序逐一分配到不同的后端服务器。
- 如果后端服务器宕机,Nginx会自动剔除故障服务器,使用户访问不受影响。
- 此策略适合服务器配置相当、无状态且短平快的服务使用。
- 权重
- 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
- 权重越高,分配到需要处理的请求越多。
- 可以在主从情况下设置不同的权值,达到合理有效地利用主机资源的目的。
- IP哈希
- 根据客户端IP地址的哈希值将请求分发到同一台后端服务器上。
- 这样可以确保每个访客固定访问一个后端服务器,解决session不能跨服务器的问题。
- 此策略适合有状态服务,如需要保持会话连续性的应用。
- 最少连接
- 把请求转发给连接数较少的后端服务器。
- 轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同。但有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least\_conn方式可以达到更好的负载均衡效果。
- 此策略适合请求处理时间长短不一造成服务器过载的情况。
8.四层和七层负载的区别?
- 四层负载均衡(tcp)
在三次负载均衡的基础上,即从第四层"传输层"开始, 使用"ip+port"接收请求,再转发到对应的机器 - 七层负载均衡(http)
从第七层"应用层"开始, 根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。
实现四层负载均衡的软件有:
F5:硬件负载均衡器,功能很好,但是成本很高。
lvs:重量级的四层负载软件
nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
haproxy:模拟四层转发,较灵活
七层负载均衡基本都是基于http协议的:适用于web服务器的负载均衡。(nginx)
四层负载均衡主要是基于tcp协议报文:可以做任何基于tcp/ip协议的软件的负载均衡。(haproxy、LVS)
1 条评论
面试好多nginx,看来我得学学这个了