nginx反向代理 负载均衡

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 代理服务器配置:

bash 复制代码
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

bash 复制代码
<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 代理服务器配置:

bash 复制代码
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 动态服务器配置:

bash 复制代码
 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 静态服务器配:

bash 复制代码
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 示例:

代理服务器:

bash 复制代码
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;

测试:

真实服务器关闭服务:

bash 复制代码
systemctl stop nginx

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

6.1反向代理服务器配置:

bash 复制代码
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。

bash 复制代码
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服务器权重,让处理能力更强的服务器可以分配到更多的请求

bash 复制代码
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会重新计算,请求服务器也会改变。
bash 复制代码
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服务器

bash 复制代码
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:

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

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

bash 复制代码
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:请求的地址发生变化,请求的服务器也可能发生变化

相关推荐
ping某18 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes