返回顶部
首页 > 资讯 > 后端开发 > Python >Java面试题冲刺第二十二天-- Nginx
  • 760
分享到

Java面试题冲刺第二十二天-- Nginx

2024-04-02 19:04:59 760人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录面试题1:谈一下你对 Nginx 的理解为啥我们总说Nginx好用?追问1:正向代理和反向代理区别在哪?正向代理面试题2:常用的 Nginx 做负载均衡的策略有哪些?1.指定权重

面试题1:谈一下你对 Nginx 的理解

Nginx 是一款自由的、开源的、高性能的 Http 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。 Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 也可以作为反向代理进行负载均衡的实现,在分布式火热的今天,Nginx是再好不过的选择。

为啥我们总说Nginx好用?

  • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的tcp连接;
  • 高度的模块化和自由软件许可证使得第三方模块(插件)层出不穷(开源时代的产物);
  • Nginx是跨平台服务器,可以运行在linuxwindows,FreeBSD,Solaris,AIX,Mac OS等操作系统上;

追问1:正向代理和反向代理区别在哪?

说到代理,我们要明确一个概念,所谓代理就是一个代表、一个渠道;

其实,正向代理和反向代理的关键不同点在于是否处于同一个网络环境下,我们往下看。

正向代理

如今的互联网公司基本都在使用内网开发,如果晚上我在家打着王者农药排位,这边领导打电话过来让我处理bug,我该怎么办?

不接,就当没听见,打完排位再说;恳切告知队友领导发病了,需要给她做人工呼吸,请勿举报~

注:如果领导也玩儿王者,那这道题就变成了失业题,请果断选二。

好了,有点跑偏了,这时我们打开电脑,肯定无法直接访问内网,因为不是同一个网络,这时就需要一个能访问内网(策略放开)的代理服务器,我们将请求发送给代理服务器,然后再将访问到的数据返回给我们;或直接通过代理服务器访问公司内网,然后改bug。我们通过这样的代理服务器访问内网的形式,就是主动代理,代理客户端去访问其他网络。如图:

在这里插入图片描述

这种代理模式称为正向代理,正向代理最大的特点是客户端明确要访问的服务器地址(或网络地址);而服务器只清楚请求来自哪个代理服务器,却不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

正向代理,代理的是客户端,代客户端发出请求,是一个位于客户端和目标服务器间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标(内网服务器),然后代理向目标服务器转交请求并将获得的内容返回给客户端。

正向代理的用途:

  • 访问原来无法访问的资源,如外网、办公内网
  • 可以做缓存,加速访问资源
  • 对客户端访问授权,上网进行认证
  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息 反向代理

一说起反向代理,大家会不约而同的想到分布式部署。是的,反向代理通常使用在分布式架构中。在客户端明确的前提下,大量访问请求(QPS)涌入。我们后台通过Nginx代理了20个服务器,高QPS打进来后先打到Nginx中,通过Nginx的负载均衡来把请求分发给这20台服务器,减轻了单台服务器负担。这种客户端 → Nginx → 服务器 的模式称为反向代理,如下图:

在这里插入图片描述

N个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则均衡分发给了后端的业务处理服务器进行处理了。此时,请求的客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,它代理的是服务端,代服务端接收请求,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:

(1)保证内网的安全,通常将反向代理服务器配置为公网访问地址,代理的WEB服务器是内网IP。

(2)负载均衡,通过反向代理服务器来优化每个单机服务实例的负载。

正向代理中,Proxy和Client同属于一个网,隐藏了客户端信息;反向代理中,Proxy和Server同属于一个网,隐藏了服务端信息;

面试题2:常用的 Nginx 做负载均衡的策略有哪些?

1.指定权重(weight)轮询(默认,常用):

指定轮询几率,可以给不同的后端服务器设置一个权重值(weight),weight和访问比率成正比,接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。

这种方式用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,多用于后端服务器性能不均的情况。


upstream dynamic_tsingxin {
    #ip地址1服务器的访问概率:30%
    server ip地址1 weight=3;
    #ip地址2服务器的访问概率:70%
    server ip地址2 weight=7;
}

2、ip_hash(常用):

上述方式存在一个问题,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,由于负载均衡,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,Session信息就丢失了!

这种情况可以采用ip_hash指令解决,如果客户已经访问了某个服务器A,当用户再次访问时,会将请求按访问IP的hash结果分配,自动定位到该服务器A。这样每个访客IP会固定访问一个后端服务器,可以解决session不能跨服务器的问题。


upstream dynamic_tsingxin {
    ip_hash;    #保证每个访客固定访问一个后端服务器
    server ip地址1;
    server ip地址2;
}

3、least_conn:

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn就可以达到更好的负载均衡效果。


upstream dynamic_tsingxin {
    least_conn;    #把请求转发给连接数较少的后端服务器
    server ip地址1; 
    server ip地址2; 
}

4、fair(第三方)

智能调整调度算法,动态根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;

需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。


upstream dynamic_tsingxin {
    server ip地址1;
    server ip地址2;
    fair;    #实现响应时间短的优先分配
}

面试题3:说几个你常用的 nginx 命令吧

命令 作用
nginx -s reopen #重启Nginx
nginx -s reload #重新加载Nginx配置文件,热部署
nginx -s stop #强制停止Nginx服务,类似kill -9 pid
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务),类似kill pid
nginx -V #显示版本和配置选项信息,然后退出
nginx -t #检测配置文件是否有语法错误,然后退出

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java面试题冲刺第二十二天-- Nginx

本文链接: https://lsjlt.com/news/132117.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java面试题冲刺第二十二天-- Nginx
    目录面试题1:谈一下你对 Nginx 的理解为啥我们总说Nginx好用?追问1:正向代理和反向代理区别在哪?正向代理面试题2:常用的 Nginx 做负载均衡的策略有哪些?1.指定权重...
    99+
    2024-04-02
  • Java面试题冲刺第二十一天--JVM
    目录面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的?Java heap spaceGC overhead limit exceeded Permgen spa...
    99+
    2024-04-02
  • Java面试题冲刺第二十七天--JVM2
    目录面试题1:简单说一下java的垃圾回收机制。面试题2:JVM会在什么时候进行GC呢?追问1:介绍一下不同代空间的垃圾回收机制 追问2:能说一下新生代空间的构成与执行逻辑...
    99+
    2024-04-02
  • Java面试题冲刺第二十九天--JVM3
    目录面试题1:如何判断对象是否存活1.引用计数算法2.可达性分析算法面试题2:哪些对象可以作为GC Roots?面试题3:你了解的对象引用方式都有哪些?1 强引用2 软引用3 弱引用...
    99+
    2024-04-02
  • Java面试题冲刺第二十天--算法(1)
    目录手撸算法1:查找数组中重复元素和重复元素的个数1. 两层循环比较方式2. 转成Map集合处理方式手撸算法2:写个二分查找demo吧手撸算法3:把两个有序数组合并成一个有序数组总结...
    99+
    2024-04-02
  • Java面试题冲刺第十二天--数据库(2)
    目录面试题2:并发场景下事务会存在哪些数据问题? 正经回答:深入追问:追问1:那Innodb是如何解决幻读问题的呢?面试题3:说一下MySQL中你都知道哪些锁?正经回答:深入追问: ...
    99+
    2024-04-02
  • Java面试题冲刺第二十三天--分布式
    目录面试题1:说说什么分布式事务?解释一下什么是CAP?CAP理解:追问1:怎么理解强一致性、弱一致性和最终一致性?面试题2:了解BASE理论么?追问1:基于BASE理论,举几个实际...
    99+
    2024-04-02
  • Java面试题冲刺第二十三天--算法(2)
    目录面试题1:你说一下常用的排序算法都有哪些?追问1:谈一谈你对快排的理解吧追问2:说一下快排的算法原理追问3:来吧!给我手敲一个快排面试题2:来!再给我手撸一个Spring追问1:...
    99+
    2024-04-02
  • Java面试题冲刺第二天--Redis篇
    目录面试题1:为什么要用 Redis ?业务在哪块儿用到的?正经回答:深入追问: 追问1:Redis里有哪些数据类型?追问2:Redis与Memcached有哪些区别?追问3:那Re...
    99+
    2024-04-02
  • Java面试题冲刺第二十四天--并发编程
    目录面试题1:说一下你对ReentrantLock的理解?CAS:AQS:追问1:你认为 ReentrantLock 相比 synchronized 都有哪些区别?面试题2:解释一下...
    99+
    2024-04-02
  • Java面试题冲刺第二十六天--实战编程
    目录面试题1:你们是怎样保存用户密码等敏感数据的?面试题2:怎么控制用户请求的幂等性的?1.设置唯一索引:防止新增脏数据2.token机制:防止页面重复提交3.悲观锁4.乐观锁5.分...
    99+
    2024-04-02
  • Java面试题冲刺第二十八天--数据库(5)
    目录面试题1:MySQL数据库cpu飙升到500%的话你会怎么处理?面试题2:什么是存储过程?有哪些优缺点优点在数据库中集中业务逻辑使数据库更安全较快的执行速度缺点不可移植性复杂存储...
    99+
    2024-04-02
  • Java面试题冲刺第十天--MyBatis2
    目录面试题1:说说你对Mybatis的理解?追问1:说一下MyBatis的工作原理和流程吧。追问2:列举几个MyBatis的核心组件,说说分别干啥用?面试题2:(问几个实际使用的问题...
    99+
    2024-04-02
  • Java面试题冲刺第二十五天--并发编程2
    目录面试题1:简单说下你对线程和进程的理解?正经回答:深入追问:追问1:那进程和线程有哪些区别呢?面试题2:守护线程和用户线程的区别? 正经回答:面试题3:什么是线程死锁&#...
    99+
    2024-04-02
  • Java面试题冲刺第二十五天--并发编程3
    目录面试题1:你了解线程池么?简单介绍一下。追问1:连接池 和 线程池是一个意思么?有什么区别?不同点面试题2:线程池中核心线程数量大小你是怎么设置的?追问1:核心线程数量过大或过小...
    99+
    2024-04-02
  • Java面试题冲刺第二十六天--实战编程2
    目录面试题2:怎么理解负载均衡的?你处理负载均衡都有哪些途径?1、【协议层】http重定向2、【协议层】DNS轮询3、【协议层】CDN4、【协议层】反向代理负载均衡5、【网络层】IP...
    99+
    2024-04-02
  • Java面试题冲刺第十四天--PRC框架
    目录面试题1:说说你对RPC框架的理解?追问1:RPC框架实现原理是什么样的1、建立通信2、服务寻址3、网络传输4、服务调用面试题2:常见的RPC框架有哪些?面试题3:说说RPC和S...
    99+
    2024-04-02
  • Java面试题冲刺第十三天--数据库(3)
    目录面试题1:MySQL有哪些数据类型?追问1:char 和 varchar 的区别是什么?1、固定长度 & 可变长度2、存储方式3、存储容量4、思考:既然VARCHAR长度...
    99+
    2024-04-02
  • Java面试题冲刺第十五天--设计模式
    目录面试题1:面向对象程序设计(OOP)的六大原则分别有哪几个面试题2:你说一下什么是设计模式追问1:那你怎么理解高内聚和低耦合?面试题3:设计模式有哪几种?追问1:你比较熟悉哪种设...
    99+
    2024-04-02
  • Java面试题冲刺第十六天--消息队列
    目录面试题1:说说你对消息队列的理解,消息队列为了解决什么问题?解耦异步削峰追问1:消息队列有什么优缺点面试题2:对于消息中间机,你们是怎么做技术选型的?面试题3:如何确保消息正确地...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作