面试问到Nginx看这一篇就够了

一、Nginx有哪些作用?

1、反向代理
2、负载均衡
3、微服务网关入口解决跨域
4、静态资源服务器
5、对我们网站保护,安全策略,熔断,防止ddos攻击,限流;
6、故障转移

二、DNS域名解析过程

本地host文件中配置,浏览器访问的时候优先在本地host文件中找,如果本地没有配置该域名,直接走当前运营获取ip地址

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

  • 正向代理是隐藏用户行为,比如用户访问会员综合平台,用户并不知道内部到底是访问到了腾讯视频或者爱奇艺
  • 反向代理隐藏真实服务器,

四、跨域问题产生的原因?

浏览器的同源策略

  • 协议相同
  • 域名相同
  • 端口相同

五、服务器集群中会存在哪些问题?

1、分布式Session一致性问题,可以使用spring-session框架或者Token替代解决
2、分布式任务调度重复执行,分布式任务调度平台xxl-job
3、分布式日志收集问题elk+kafka日志收集

六、Nginx的五种负载均衡算法?

1、默认轮询:遍历
2、权重:服务器访问比例
3、哈希ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
4、响应时间fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配
5、url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

七、软负载和硬负载的区别?

软=软件:使用软件进行负载均衡,比如nginx
硬=硬件:使用一定设施实现负载均衡

八、跨域问题七种方案解決?

1、设置响应头允许跨域:response.setHeader(“Access-Control-Allow-Origin”,"*");
2、使用jsonp解决,缺点:只能够发送get请求,很麻烦,不推荐
3、基于Nginx实现统一接口的域名和端口号,nginx使用同一个域名解决跨域问题,使用location不同,转发到指定服务器
4、使用微服务中的网关解决跨域问题
5、使用HttpClient实现转发,和Nginx反向代理原理一样,httpClient不存在跨域行为
6、SpringBoot跨域注解@CrossOrign
7、vue

九、Lvs和nginx负载均衡的区别?

  • Lvs是管理Nginx集群,第四层负载均衡,基于Tcp ip和端口号实现负载均衡,比较底层
  • Nginx是管理我们的服务器集群,第七层负载均衡,对http协议实现负载均衡

十、Lvs+KeepAlived+Nginx实现高可用

  • Lvs:nginx集群协调者,虚拟vip,对Nginx负载均衡,客户端请求先到达lvs虚拟vip地址,再通过lvs实现负载均衡转发到Nginx服务器,Nginx再转发到真实上游服务器,设置虚拟vip的规范,必须在同一个网段192.168.212.xxx,且不能被占用
  • KeepAlived:扩展Lvs,对Nginx进行心跳检测,宕机重启,每个Nginx都需要安装一个KeepAlived,重启多次都失败的情况下,通过邮件的形式通知运维人员人工处理(报警)
  • Nginx:管理上游服务器

十一、主备Nginx都宕机的情况下怎么解决?

1、重启是可以,很low
2、使用lvs心跳检测,定时ping ip:端口号,使用keepAlived重启

十二、nginx动静分离架构模式

  • 静态资源放在nignx服务器,动态放在tomcat服务器,这样吞吐量比较高
  • 客户端–>nginx–>客户端

十三、传统模式

  • 静态动态都在tomcat服务器上,吞吐量低
  • 客户端–>nginx–>tomcat静态资源->nginx–>客户端

十四、基于nginx实现动静分离两种方法

1、用nginx.conf中的location判断前缀
127.0.0.1/static 反向代理到静态文件
2、用nginx.conf中的location判断后缀
~(png|jpg|gif)

十五、网页加载慢的原因及解决

  • 一个网站中静态资源比较占带宽,图片啥的比较大,代码占的很少,带宽传输的速度和距离也所有关系的
  • 如果同时有500人访问网站,并发量达到500人,就要做限流和熔断机制,否则服务器很容易出问题
  • 带宽不足,如果图片过大,建议将一张大图拆分成N多个小图,分段存储
  • 并发量大

比如:动静态资源都放同一个服务器的时候,动态资源10kb,静态资源590kb
带宽是1mbps 传输效率128kb/m 1024➗8=128
渲染网页需要600kb➗128kb/s = 4.7s

解决方案:
1、增加带宽,治标不治本
2、动静态资源分离

十六、为什么将静态资源存放到第三方服务器效率非常高呢?

1、云服务器签订带宽都是用T算
2、CDN(内容分发网络)内容分发,能够将静态资源缓存到全国各地节点能够减少客户端与cdn带宽距离传输提高响应速度; 就近访问(减少带宽,提高访问速度),每个客户访问的地区都不同,当一个服务器访问过多时,回去访问比较空闲的服务器,有点像负载均衡

  • 静态资源在七牛云中是物理存放(持久化到硬盘)的,其他节点是缓存的,临时存放的

十七、压缩静态文件的三种方式

1、在线js格式化,手动压缩,去注释,弄成一行
2、Maven打包,会自动压缩,生成.min文件
3、使用nginx,放到nginx.conf中的server中,访问的时候会自动压缩,压缩格式,比如function变成A,var变成B,返回给浏览器,浏览器把A识别成function,这样减少了很多带宽传输,选择重复次数比较多的替换,每次访问不会重复压缩,有缓存的。
缺点:这样非常耗cpu资源,要处理很多东西,消耗内存

十八、http协议返回304,访问缓存

浏览器第一次访问的时候,会缓存静态资源,第二次访问的时候访问缓存的静态资源状态码304,当清理缓存,或者修改静态文件的时候会重新生成缓存,状态码变成200,缓存中的Key是url,value就是缓存的内容,nginx也自带缓存

一级一级往下找,有缓存就不会往下找

  • 客户端缓存(浏览器缓存)->cdn缓存(七牛云缓存)–>Nginx缓存–>jvm缓存–>redis分布式缓存–>数据库

十九、nginx缓存与服务器真实数据一致性问题

1、使用lua解决,效率高
2、加版本号或者时间戳,这样每次的url就会都不一样,不推荐
3、删除缓存

二十、nginx故障转移

 如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。  
 proxy_next_upstream http_502 http_504 error timeout invalid_header;  
 proxy_cache cache_one;  

二十一、其他

1、nginx和真实服务器是在同一个局域网下,但是不在同一个服务器中,
2、只输入域名的情况下,默认访问80端口
3、netstat -aon|findstr “80” 查看端口号被谁占用
4、服务器集群是为了解决高并发,高可用
5、分布式事务问题不属于节点集群中的问题
6、上游服务器==真实服务器
7、80端口号被占用问题:https://www.cnblogs.com/Noul/p/10174061.html
8、nginx 是c语言编写的
9、502,nginx转发失败,正在发布
10、nginx实现集群,一主一备,要发布新内容时,通过备机发布,然后停掉主机,备机变成主机。如果直接发布在主机上,需要停一下主机,更新,重启,不好。
11、阿里云服务器不支持虚拟vip技术,要额外mai
12、在用户访问网址的时候出现异常,通过aop拦截异常,调用微信消息接口发送给开发人员
13、oos对象存储
14、第三方七牛云静态资源服务器,相对阿里云来说比较好,是专门做静态资源服务器的,阿里云oos也是做静态资源服务器的
15、最贵的是带宽,然后是ip地址
16、内网中不需要带宽传输,速度特别快,外网需要带宽传输
17、内存大,可以同时开很多个软件(进程多),带宽大,传输效率高,内核大,处理速度快
18、8兆图片通过技术手段压缩成2兆会变的模糊,通过分段存储比较好
19、redis和数据库缓存一致性问题,mq订阅binlog同步数据一致性问题,jvm与redis保持一致性问题

发布了53 篇原创文章 · 获赞 2 · 访问量 1869

猜你喜欢

转载自blog.csdn.net/qq_42972645/article/details/104626847