nginx反向代理、负载均衡

nginx反向代理、负载均衡

一、反向代理 proxy模块

1、作用

提升业务的性能、并发能力

隐藏后端真实业务服务器的信息,增强安全性

2、语法

conf 复制代码
location URI {
	proxy_pass	后端服务器地址; 
}
  • 访问nginx时地址为/kr, 代理到192.168.140.10:9000
conf 复制代码
        location /kr {
            proxy_pass http://192.168.140.10:9000/project;
        }
  • 注意: 后端服务器没有具体的uri地址时,nginx会将location中的uri地址拼接到后端服务器地址
conf 复制代码
        location /test {
            proxy_pass http://192.168.140.10:9000;
        }
  • 注意:location以正则表达式匹配请求时,后端服务器地址不允许有任何uri
conf 复制代码
        location  ~  /music {
            proxy_pass http://192.168.140.10:9000/project;
        }

3、配置后端服务器记录真实的客户端地址

nginx进行反向代理时,默认情况下,后端业务服务器记录访问日志时会记录Nginx的地址,为了让后端能正常记录真实的客户端地址,需要做如下配置:

  • 通过proxy_set_header在请求中添加X-REAL-IP字段
conf 复制代码
        location /kr {
            proxy_pass http://192.168.140.10:9000/project;
            proxy_set_header X-REAL-IP $remote_addr;
        }
  • 修改后端业务服务器的访问日志格式
conf 复制代码
	 pattern="%{X-REAL-IP}i %t "%r" %s %b %{Referer}i %{User-Agent}i"

二、负载均衡 upstream模块

2.1 负载均衡作用

提升业务的并发能力

由nginx接收请求,根据不同的算法/策略将请求转发到后端的多个服务器上

2.2 调度算法/策略

  • rr 轮询,默认算法, 负载均衡效果最优

    支持设置不同的权重值

  • sh 源hash

    一段连续的时间内,同一个客户端的所有请求会到同一个后端服务器

  • lc 最少连接

2.3 配置语法

conf 复制代码
upstream  服务器组 {
	[负载均衡算法]; 
	server  IP:port [weight=1] [fail_timeout=秒] [max_fails=次数]; 
	server  IP:port; 
}
conf 复制代码
location  uri {
	proxy_pass  http://服务器组;
}
conf 复制代码
    upstream java {
       server 192.168.140.10:9000 weight=1 fail_timeout=3 max_fails=2;
       server 192.168.140.10:9001 weight=1 fail_timeout=3 max_fails=2;
       server 127.0.0.1:8000 backup;
    }
    
      location / {
           proxy_pass http://java/project/;
           proxy_set_header X-REAL-IP $remote_addr;
        }

        location /mp3 {
           proxy_pass http://java/music/;
           proxy_set_header X-REAL-IP $remote_addr;
        }

    server {
        listen       8000;
        server_name  localhost;

        location / {
            root   /sorry;
            index  index.html index.htm;
        }
    }
相关推荐
SkyWalking中文站4 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ7 小时前
Kubeneters HA Cluster部署
运维
江华森12 小时前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森12 小时前
Matplotlib 数据绘图基础入门
运维
江华森12 小时前
NumPy 数值计算基础入门
运维
乘云数字DATABUFF5 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜7 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB8 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维