《探索Nginx的奥秘&从代理到负载均衡的艺术实践》

简介: 《探索Nginx的奥秘&从代理到负载均衡的艺术实践》

⭐在分布式微服务架构中,服务是分布在不同主机、服务器上的。我们希望访问不同的服务,就需要一个代理服务器来为我们做请求转发,这个时候我们就引入了Nginx。⭐

🌺Nginx的引入🌺

我们在请求传统的单体项目时,常常是在低并发的情况下进行的。一个公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。

但是慢慢的,使用公司平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。

于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。下图的服务器1就是代理服务器

我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。

还有一种情况就是,当我们的分布式微服务项目不同服务部署在不同主机下的时候,我们希望通过不同的路径访问不同的服务怎么来实现?

公司的项目不一定都部署在一台服务器上,对吧?通常情况下都会被拆分在不同主机上的,我们希望通过不同路径访问它们,而且我们为了分担服务器的访问压力,我们希望轮训访问这两台服务器。在访问服务器上的资源的时候,我们还希望静态资源和动态资源能够分开,这又怎么办?

所以整理一下我们的需求,我们的访问需求如下:

  • 需要代理服务器
  • 负载均衡
  • 动静分离

实现上面的需求可以用 网关服务,也可以使用 Nginx

使用Nginx还有一个好处就是可以使用 高可用集群 防止服务器宕机。

如上图,我们用两个Nginx服务器搭建了一个简单的集群,这个也叫双机热备。当其中一台Nginx宕机之后,仍能用另一台来工作,两台Nginx之间是用keeplived来监测心跳,从而确定主从设备之间是否宕机。

🌺深刻理解正向代理与反向代理🌺

正向代理反向代理Nginx的重要概念、功能。因为国内的砖家起名字的时候一开始说正向代理,反向代理。但是,从逻辑处理上来说有漏洞,就是一个必要的前提需要说明,正向和反向是基于什么来定方向的?就像坐标轴一样,原点是什么,定义右边是正,左边是负。

我们先看一下官网解释:

🌹Reverse proxy🌹

From Wikipedia, the free encyclopedia

A reverse proxy taking requests from the Internet and forwarding them to servers in an [internal network](https://www.zhihu.com/search?q=internal network&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={“sourceType”%3A"answer"%2C"sourceId"%3A471185862}). Those making requests to the proxy may not be aware of the internal network.

In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client, appearing as if they originated from the proxy server itself.[1] Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client.

Quite often, popular web servers use reverse-proxying functionality, shielding application frameworks of weaker HTTP capabilities.

重点是这句:

Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client。

翻译:正向代理是客户端和其他所有服务器(重点:所有)的代理者,而反向代理是客户端和所要代理的服务器之间的代理。

总结:一个对客户端负责,一个对所代理的服务器负责。一个,一个

我们配合下图来理解:

客户端这个时候想访问,但是因为国内原因不能访问,这个时候就用了代理服务器,代理服务器帮你访问服务器资源,拿到以后传给国内的你。这个时候代理服务器是在帮你去其他网络拿资源,整个时候整个网络的资源走向如下图,从外网服务器到代理服务器,最后到客户端,所以这个是 正向代理正向=代理服务器在帮你(客户端)=资源走向

那什么是 反向代理 呢?看下图:

客户端将请求发送到代理服务器,由代理服务器去选择目标服务器获取数 据后,返回给客户端,这种代理方式为反向代理

接下来我们就理解什么是 反向代理?

项目设计者, 不希望客户端直接访问目标 Web 服务器(比如目标 Web 服务器是集群, 如 果直接访问就会提供多个公网 IP), 而是希望提供一个统一的访问 IP, 这个是理解反向代理 的前提,即为什么要反向代理

  • 反向代理帮助的对象是目标 Web 服务器。

🌹正向代理与反向代理的区别🌹

当前面的内容理解后,对于正向代理和反向代理的区别就很好理解了。

最核心的不同在于代理的对象不同。

  • 正向代理是代理客户端
  • 反向代理是代理服务器。

而根据这核心的区别,我们也可以记住:代理哪端便可以隐藏哪端

也就是说:

  • 正向代理隐藏真实客户端
  • 反向代理隐藏真实服务端

🌹反向代理为什么叫反向代理🌹

从我们用户的角度来看:

  • 代理我们发出请求的客户端被称为正向代理
  • 而代理我们访问的服务器,则被称为反向代理

从代理结构的角度来看(代理服务器在两种代理中的作用均为收发请求与响应)

🌹负载均衡🌹

当客户端向反向代理服务器(比如 Nginx)发出请求,如果 Nginx 代理了多个 WEB 服务器(集群),Nginx 会将请求/负载分发到不同的服务器,也就是负载均衡。

这么做的好处就是分担服务器压力,提高并发效率。

🌹动静分离🌹

为了加快网站的解析速度,可以把动态资源和静态资源由不同的服务器来 解析,降低单个服务器的压力。

🌺Nginx的安装🌺

Windows安装⭐

🌹下载nginx🌹

http://nginx.org/en/download.html 下载稳定版本。

以nginx/Windows-1.16.1为例,直接下载 nginx-1.16.1.zip。

下载后解压,解压后如下

###🌹启动nginx🌹

有很多种方法启动nginx

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可

🌹检查nginx是否启动成功🌹

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!

###🌹配置监听🌹

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。

当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效

🌹关闭nginx🌹

如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)

(2)使用taskkill taskkill /f /t /im nginx.exe

  1. taskkill是用来终止进程的,
  2. /f是强制终止 .
  3. /t终止指定的进程和任何由此启动的子进程。
  4. /im示指定的进程名称 .

🌹Linux下常用命令🌹

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
⭐负载均衡⭐
upstream lb{
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=1;
}
location / {
    proxy_pass http://lb;
}


目录
相关文章
|
4月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
106 2
|
2月前
|
负载均衡 应用服务中间件 Linux
"揭晓nginx的神秘力量:如何实现反向代理与负载均衡,拯救服务器于水火?"
【8月更文挑战第20天】在Linux环境下,nginx作为高性能HTTP服务器与反向代理工具,在网站优化及服务器负载均衡中扮演重要角色。本文通过电商平台案例,解析nginx如何解决服务器压力大、访问慢的问题。首先介绍反向代理原理,即客户端请求经由代理服务器转发至内部服务器,隐藏真实服务器地址;并给出配置示例。接着讲解负载均衡原理,通过将请求分发到多个服务器来分散负载,同样附有配置实例。实践表明,采用nginx后,不仅服务器压力得到缓解,还提升了访问速度与系统稳定性。
63 3
|
2月前
|
缓存 负载均衡 应用服务中间件
【揭秘】nginx代理配置全攻略:从零到精通,一文带你玩转高效网络代理的秘密武器!
【8月更文挑战第22天】nginx是一款高性能的HTTP与反向代理服务器,支持代理服务、负载均衡及缓存等功能,有助于提升网站响应速度和安全性。首先需确保已安装nginx,可通过包管理器进行安装。安装后启动并确认nginx运行状态。接着编辑配置文件(通常位于`/etc/nginx/nginx.conf`),设置代理转发规则,例如指定目标服务器地址和请求头信息。配置完成后测试有效性并重新加载nginx以应用更改。可以通过部署简易HTTP服务器验证代理功能是否正常工作。此外,还可以通过扩展配置文件实现更复杂的代理需求,如基于路径的代理和SSL加密等。
388 2
|
5月前
|
负载均衡 应用服务中间件 Linux
Nginx源码阅读:避免惊群以及负载均衡的原理与具体实现
Nginx源码阅读:避免惊群以及负载均衡的原理与具体实现
106 0
|
自然语言处理 负载均衡 算法
超全Nginx反向代理服务器原理+实战篇3
超全Nginx反向代理服务器原理+实战篇
|
域名解析 存储 缓存
超全Nginx反向代理服务器原理+实战篇1
超全Nginx反向代理服务器原理+实战篇
|
负载均衡 网络协议 JavaScript
负载均衡 LVS vs Nginx 对比!还傻傻分不清?
负载均衡 LVS vs Nginx 对比!还傻傻分不清?
|
存储 缓存 前端开发
超全Nginx反向代理服务器原理+实战篇2
超全Nginx反向代理服务器原理+实战篇
|
负载均衡 网络协议 算法
深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」
深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」
211 0
深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」
|
缓存 负载均衡 监控
负载均衡 LVS vs Nginx 对比,还傻傻分不清?
负载均衡 LVS vs Nginx 对比,还傻傻分不清?
283 0
负载均衡 LVS vs Nginx 对比,还傻傻分不清?