群里大佬航拍,坐标:上海,请放大后欣赏~
作者:對你何止一句钟意
车票
-
面试题1:谈一下你对 Nginx 的理解
-
- 追问1:正向代理和反向代理区别在哪?
-
面试题2:常用的 Nginx 做负载均衡的策略有哪些?
-
面试题3:说几个你常用的 nginx 命令吧
-
每日小结
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识
、集合容器
、并发编程
、JVM
、Spring全家桶
、MyBatis等ORMapping框架
、MySQL数据库
、Redis缓存
、RabbitMQ消息队列
、Linux操作技巧
等。
===================================================================================
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器
;同时也是一个 IMAP、POP3、SMTP 代理服务器。 Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 也可以作为反向代理进行负载均衡的实现
,在分布式火热的今天,Nginx是再好不过的选择。
为啥我们总说Nginx好用?
-
Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接;
-
高度的模块化和自由软件许可证使得第三方模块(插件)层出不穷(开源时代的产物);
-
Nginx是
跨平台服务器
,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上;
说到代理,我们要明确一个概念,所谓代理就是一个代表、一个渠道;
其实,正向代理和反向代理的关键不同点在于是否处于同一个网络环境下
,我们往下看。
正向代理
如今的互联网公司基本都在使用内网开发,如果晚上我在家打着王者农药排位,这边领导打电话过来让我处理bug,我该怎么办?
- 不接,就当没听见,打完排位再说;
- 恳切告知队友领导发病了,需要给她做人工呼吸,
请勿举报
~
注:如果领导也玩儿王者,那这道题就变成了失业题,请果断选二。
好了,有点跑偏了,这时我们打开电脑,肯定无法直接访问内网,因为不是同一个网络,这时就需要一个能访问内网(策略放开)的代理服务器,我们将请求发送给代理服务器,然后再将访问到的数据返回给我们;或直接通过代理服务器访问公司内网,然后改bug。我们通过这样的代理服务器访问内网的形式,就是主动代理,代理客户端去访问其他网络。如图:
这种代理模式称为正向代理
,正向代理最大的特点是客户端明确要访问的服务器地址(或网络地址)
;而服务器只清楚请求来自哪个代理服务器,却不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
正向代理,代理的是客户端,代客户端发出请求
,是一个位于客户端和目标服务器间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标(内网服务器
),然后代理向目标服务器转交请求并将获得的内容返回给客户端。
正向代理的用途:
-
访问原来无法访问的资源,如外网、办公内网
-
可以做缓存,加速访问资源
-
对客户端访问授权,上网进行认证
-
代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
一说起反向代理,大家会不约而同的想到分布式部署。是的,反向代理通常使用在分布式架构中
。在客户端明确的前提下,大量访问请求(QPS)涌入。我们后台通过Nginx代理了20个服务器,高QPS打进来后先打到Nginx中,通过Nginx的负载均衡来把请求分发给这20台服务器,减轻了单台服务器负担。这种客户端 → Nginx → 服务器
的模式称为反向代理,如下图:
N个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则均衡分发给了后端的业务处理服务器进行处理了。此时,请求的客户端是明确的
,但是请求具体由哪台服务器处理的并不明确了
,Nginx扮演的就是一个反向代理角色。
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问
。
反向代理,它代理的是服务端,代服务端接收请求
,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的作用:
(1)保证内网的安全,通常将反向代理服务器配置为公网访问地址,代理的Web服务器是内网IP。
(2)负载均衡,通过反向代理服务器来优化每个单机服务实例的负载。
- 正向代理中,
Proxy和Client同属于一个网,隐藏了客户端信息
;
- 反向代理中,
Proxy和Server同属于一个网,隐藏了服务端信息
;
课间休息,又来秀一下来自咱们群里同学牛批的搬砖工地美景,坐标:上海。
作者:對你何止一句钟意
==========================================================================================
指定权重(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
:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-UjtGigRh-1713442225790)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!