nginx反向代理 负载均衡

2023-09-20 09:54:55

1.反向代理介绍:


反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

   Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能

 2.七层代理和四层代理:


  2.1 七层代理:


七层是最常用的反向代理,只能配置的在nginx配置文件的http模块中
配置的方法名称:upstream 模块,不能写在server中,也不能在location中,在http模块当中是独立的一个配置


  2.2 四层代理:


四层代理是基于tcp/ip协议层的代理转发方式,可以实现基于ip地址和端口进行负载均衡转发。
四层代理无法获取http请求当中的URL信息,只能对tcp/udp数据包进行转发。流量转发。
配置的方法名称:stream,stream是不能配置在http模块中,配置在全局当中。是属于一个独立的模块,不属于其他任何模块。
3.反向代理web服务器:
  3.1 代理服务器配置:

vim /apps/nginx/conf.d/www.conf
server{
        listen 80;
        server_name  www.wzw.com;
        root    /apps/nginx/html;
     location  / {
        proxy_pass http://192.168.88.101;
}
 

}

3.2 服务器配置 :

      vim /apps/nginx/html/index.html

<html>
<body>
<h1>this is yunjisuan  </h1>
<img src="http://www.wzw.com/2.jpg"/>
</body>
</html>

3.3 客户端访问:

3.4 代理不同端口:

   代理服务器添加监听端口:

4.反向代理动静分离:

  4.1  准备:

 4.2 代理服务器配置:

server{
  listen 80;
  listen 8080;
  server_name www.wzw.com;
  root /apps/nginx/html;
  
 
location  /static {
        proxy_pass http://192.168.88.128;
}
 
location  /api  {
   proxy_pass http://192.168.88.101;
}
}
 
nginx -s reload

 4.3 动态服务器配置:

 cd /apps/nginx/html
 
  mkdire  api
 
  vim index.html
 
  api
  api
  api
  api
  api
  api
  api
 
vim /apps/nginx/conf/nginx.conf
 
 server块添加监听端口:
   listen 8080;
 
nginx -s reload
  4.4 静态服务器配:

4.4 静态服务器配:

cd /apps/nginx/html
 
  mkdire  api
 
  vim index.html
   
  static
  static
  static
  static
  static
  static

5.反向代理服务器的缓存功能:
  后端服务器突然关闭时,客户端无法访问,代理服务器的缓存功能可以加强安全稳定性。

  5.1 主配置文件定义缓存参数:
proxy_cache_path /apps/nginx/proxycache #定义缓存保存路径

levels=1:1:1 #定义缓存目录结构层次

keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key

inactive=120s #缓存有效时间

max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值

  5.2 子配置文件调用缓存功能:
proxy_cache proxycache        ##使用定义名称; 

proxy_cache_key $request_uri;  #对客户端url的数据进行MD5的运算做为缓存的key

proxy_cache_valid   [code ...]  time;  #定义对【响应码】的响应内容的缓存时长     

proxy_cache_valid any 1m;  #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存

 清理缓存   方法1::rm -rf 缓存目录  (还是这个方便。。)

                  方法2: 第三方扩展模块ngx_cache_purge
 

 5.3 示例:

代理服务器:

vim /apps/nginx/conf/nginx.conf
 
http模块添加:
 
proxy_cache_path /apps/nginx/proyxcache levels=1:1:1  keys_zone=proxycache:20m inactive=120s max_size=1g;
 
vim /apps/nginx/conf.d/www.conf
 
server块添加:
 
   proxy_cache proxycache;
   proxy_cache_key $request_uri;
   proxy_cache_valid 200 302 301 10m;
   proxy_cache_valid any 5m;

测试:

  真实服务器关闭服务:

systemctl stop nginx

6.反向代理客户端IP透传: 

    6.1反向代理服务器配置:

location  / {
    proxy_pass http://192.168.88.101:8080;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     #添加 客户端IP和反向代理服务器IP到请求报文头部;
}
 
 
proxy_set_header X-Real-IP $remote_addr;
  #也可以使用,只添加客户端IP到请求报文头部,转发至后端服务器;

6.2 服务器日志:   

$http_x_forwarded_for;    记录跳转信息,默认日志中有此项。如果是自定义日志需要添加。

7.反向代理负载均衡:
    Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能。

  7.1 默认算法轮询:
    最基本的配置方法,每个请求会按时间顺序逐一分配到不同的后端服务器基本上1:1。
 


upstream wzw {                   ##定义一组服务器组
   server 192.168.88.101;
   server 192.168.88.128;
 
}
 
server{
  listen 80;
  server_name www.wzw.com;
  root /apps/nginx/html;
 
 
location  / {
    proxy_pass http://wzw;    ##代理到wzw组
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

7.2  加权轮询:

  加权轮询建立在轮询算法之上,通过给不同web服务器权重,让处理能力更强的服务器可以分配到更多的请求

upstream wzw {                   ##定义一组服务器组
   server 192.168.88.101  weight=5;
   server 192.168.88.128  weight=1;
 
}
 
server{
  listen 80;
  server_name www.wzw.com;
  root /apps/nginx/html;
 
 
location  / {
    proxy_pass http://wzw;    ##代理到wzw组
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

7.3 IP_hash:

  • ip_hash根据IP地址,计算出hash值,使用ip_hash算法,同一客户端的请求会被分配到同一个后端服务器,从而保证会话的稳定性,请求速度块。
  • 缺点:如果后端服务器数量发生改变,hash会重新计算,请求服务器也会改变。
upstream wzw { 
      ip_hash;        ##同一个IP客户端固定访问一个后端服务器
      server 192.168.88.101; weight=5;
      server 192.168.88.128; weight=1;
}

7.4 url_hash:

   根据uri地址计算hash值,使用url_hash会把相同请求的uri分配到同一个后端web服务器

upstream wzw { 
      hash $request_uri consistent;   #基于用户请求的uri做hash
      server 192.168.88.101; weight=5;
      server 192.168.88.128; weight=1;

}

7.5 least_conn:

    最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器

   主要适用于后端服务器处理任务耗时不同的情况,避免了所以请求集中在处理能力更强的服务器上,一般配合加权轮询使用


upstream wzw { 
      least_conn;
      server 192.168.88.101; weight=5;
      server 192.168.88.128; weight=1;
}

7.6 使用场景总结:
小场景:并发量很小,默认算法就可以满足
后端web服务器的处理性能有差异:加权轮询与最少连接数配合使用
大型并发:ip_hash或url_hash(可直接访问缓存,从而缓解后端服务器压力,第一次请求后,会有贝蒂缓存,而且因hash算法原因,请求的后端web服务器不会发生变化,从而可以提高访问速度。
 注: 

ip_hash:后端服务器数量发生变化,请求的服务器也会发生变化

url_hash:请求的地址发生变化,请求的服务器也可能发生变化
 

更多推荐

Unity中Shader实现模板测试Stencil

文章目录前言一、UI中的遮罩1、Mask——>模板测试2、RectMask2D——>UNITY_UI_CLIP_RECT二、模板缓冲区Stencil一般是和Pass平行的部分,Pass部分写的是颜色缓冲区Stencil:Comp(比较操作)Pass(模版缓冲区的更新)三、实际使用1、在使用模板缓冲区前,需要如下图设置一

在 Windows 上安装 NodeJS

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录安装vm-windows、node.js和npm替代版本管理器安装VisualStudioCode替换代码编辑器安装Git使用适用于Linux的Windows子系统进行生产如果你不熟悉如何使用Node.js进行

开始在 Windows 上使用 Next.js

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录必备条件安装Next.js本指南帮助你安装Next.jsWeb框架并在Windows上启动和运行。Next.js是一个框架,用于基于React.js、Node.js、Webpack和Babel.js创建由服务器

黑马头条 热点文章实时计算、kafkaStream

热点文章-实时计算1今日内容1.1定时计算与实时计算1.2今日内容kafkaStream什么是流式计算kafkaStream概述kafkaStream入门案例Springboot集成kafkaStream实时计算用户行为发送消息kafkaStream聚合处理消息更新文章行为数量替换热点文章数据2实时流式计算2.1概念一

华为---STP协议简介(一)

生成树协议简介什么是生成树协议STP(SpanningTreeProtocol)是一种由交换机运行的、用来解决交换网络中环路问题的数据链路层协议。为提高网络可靠性,交换网络中通常会使用冗余链路,但是冗余链路会给交换网络带来环路风险,导致广播风暴以及MAC地址表不稳定等问题,影响用户通信质量。生成树协议STP可以在提高可

Linux 多线程 | 线程安全、死锁、线程同步

在前面的文章中我们讲述了锁的理解、原理、用户级线程库的内容,以及对Linux中的锁和线程进行了封装,本文中将继续对多线程的内容进行讲解。可重入与线程安全概念线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。重入:同一个函数被不同的执行流调用

大模型对外提供应用的三种服务方式及示例

最近在研究Llama大模型的本地化部署和应用测试过程中,为了给大家提供更多的应用方式,研究了如何利用python快速搭建各种应用访问服务,一般来说,我们开发完成的软件模块为了体现价值,都需要对外提供服务,最原始的方式就是将源码或编译好的类库提供给需要使用的客户进行引入使用,但对于大模型的应用来说,这种方式显然不行,一个

MySQL 深分页优化

在实际应用场景中,列表分页查询是很常见的。假设现在存在某张表,已知ID是主键,针对user_name建立了二级索引。针对该表进行分页查询。select*fromtableorderbyidlimitoffset,size;那么同样都是获取10条数据,查询第一页和查询第一百页的速度一样吗?首先先回忆下MySQL查询语句的

Python文件操作和管理指南:打开、读取、写入和管理文件

文章目录文件(File)打开文件使用with...as语句打开文件读取文件内容读取大文件的方式逐行读取和读取全部行写文件操作文件定位seek()tell()关闭文件文件管理获取目录结构获取当前目录切换当前所在目录创建目录删除目录删除文件重命名文件总结python精品专栏推荐python基础知识(0基础入门)python

Tomcat多实例+Nginx动静分离、负载均衡

这里写目录标题Tomcat多实例+动静分离、负载均衡一、Tomcat多实例部署1、安装JDK2、安装启动tomcat二、Nginx+Tomcat负载均衡、动静分离1、Nginx负载均衡实现原理1.1原理1.2Nginx配置反向代理的主要参数2、Nginx动静分离实现原理2.1原理2.2Nginx静态处理优势3、动静分离

计网第五章(运输层)(四)(TCP的流量控制)

一、基本概念流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现的。二、具体实现接收方通过向发送方发送带有自己接收窗口值的报文段来控制发送方的发送窗口。注意:

热文推荐