nginx反向代理 负载均衡

 

目录

1.反向代理介绍:

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

  2.1 七层代理:

  2.2 四层代理:

3.反向代理web服务器:

  3.1 代理服务器配置:

3.2 服务器配置 :

3.3 客户端访问:

3.4 代理不同端口:

4.反向代理动静分离:

  4.1  准备:

  4.2 代理服务器配置:

  4.3 动态服务器配置:

  4.4 静态服务器配:

  4.5  测试:

5.反向代理服务器的缓存功能:

  5.1 主配置文件定义缓存参数:

  5.2 子配置文件调用缓存功能:

    5.3 示例:

代理服务器:

测试:

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

    6.1反向代理服务器配置:

  6.2 服务器日志:   

7.反向代理负载均衡:

  7.1 默认算法轮询:

7.2  加权轮询:

7.3 IP_hash:

7.4 url_hash:

7.5 least_conn:

7.6 使用场景总结:


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/htmlmkdire  apivim index.htmlapiapiapiapiapiapiapivim /apps/nginx/conf/nginx.confserver块添加监听端口:listen 8080;nginx -s reload

  4.4 静态服务器配:

  cd /apps/nginx/htmlmkdire  apivim index.htmlstaticstaticstaticstaticstaticstatic

  4.5  测试:

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.confhttp模块添加: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.confserver块添加:proxy_cache proxycache;proxy_cache_key $request_uri;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;

测试:

  真实服务器关闭服务: 

  
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做hashserver 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 使用场景总结:

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

 注: 

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/93759.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lvs+KeepAlived高可用高性能负载均衡

目录 1.环境介绍 2.配置keepalived 3.测试 1.测试负载均衡 2.测试RS高可用 3.测试LVS高可用 3.1测试lvs主服务宕机 3.2.测试lvs主服务器恢复 4.我在实验中遇到的错误 1.环境介绍 环境&#xff1a;centos7 RS1---RIP1:192.168.163.145 VIP 192.168.163.200 RS2---RIP2…

Java智慧工地源码 智慧工地APP源码

Java智慧工地源码 智慧工地APP源码 系统定义&#xff1a; 智慧工地信息化管理平台是依托计算机信息、网络通讯、物联网、系统集成及云计算技术&#xff0c;通过数据采集、信息动态交互、智能分析&#xff0c;建立起来的一套集成的项目建设综合管理系统。实现项目管理信息化、网…

wangluobiancheng

UDP send: receive: TCP

ARM DIY(四)WiFi 调试

文章目录 焊接打开内核编译选项重新编译内核烧录 && 运行 && 测试完善脚本测速手搓天线正式天线 焊接 换个粗点的风枪嘴&#xff0c;让热风覆盖 RTL8823BS 整体模块&#xff0c;最终实现自动归位 焊接 SDIO 接口的上拉电阻以及复位引脚上拉电阻 硬件部分就这…

C# Dapper 操作Oracle数据库

nuget安装内容 1.配置连接字符串 OracleConnectionString这个可用 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","…

公司内部网段多管控乱,该如何规范跨网文件传输交换?

古往今来&#xff0c;高筑墙一直是有效的防御措施。从边塞长城到护城河外的高高城墙&#xff0c;都是利用隔离地域的形式实现保护安全域的效果。这样一来&#xff0c;城内的安全域可以在遇到危险时受到有效保护。 在企业网络安全防护方面&#xff0c;网络安全域隔离也是网络安全…

isEmpty 和 isBlank 的区别

干了3年java&#xff0c;代码中 isEmpty 和 isBlank 的区别 都不知道&#xff0c;一顿瞎用。也许你两个都不知道&#xff0c;也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外&#xff0c;并不知道还有isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank的存在, come on ,让我们…

1.(python数模)单函数读取常用文件

Python单函数读取常用文件 代码如下&#xff1a; import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔符为逗…

DBO优化SVM的电力负荷预测,附MATLAB代码

今天为大家带来一期基于DBO-SVM的电力负荷预测。 原理详解 文章对支持向量机(SVM)的两个参数进行优化&#xff0c;分别是&#xff1a;惩罚系数c和 gamma。 其中&#xff0c;惩罚系数c表示对误差的宽容度。c越高&#xff0c;说明越不能容忍出现误差,容易过拟合。c越小&#xff0…

按照json文件的值复制图片

按照json文件的值复制图片 文件格式处理当前JSON代码封装增加批处理 文件格式 0是不挑选&#xff0c;1是挑选 处理当前JSON # coding: utf-8 from PIL import Image, ImageDraw, ImageFont import os import shutil import cv2 as cv import numpy as np import jsondef read…

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

大数据专业毕业能从事什么工作

大数据从业领域很宽广&#xff0c;不管是科技领域还是食品产业&#xff0c;零售业等都是需要大数据人才进行大数据的处理&#xff0c;以提供更好的用户体验&#xff0c;优化库存降低成本预测需求。 大数据开发做什么&#xff1f; 大数据开发分两类&#xff0c;编写Hadoop、Spa…