当前位置: 首页 > news >正文

【Day 50 】Linux-nginx反向代理与负载均衡

概述

        在现代 Web 架构中,Nginx 作为高并发、高性能的 HTTP 和反向代理服务器,被广泛应用于提升服务性能、增强系统安全性和实现负载均衡。其中,反向代理能够隐藏后端服务器信息并优化请求处理流程,负载均衡则可将请求分发到多个后端节点,大幅提升系统并发能力。

一、反向代理(proxy 模块)

1. 作用

  • 性能优化:增加业务并发量。Nginx 可缓存静态资源,减少后端服务器处理压力,提升响应速度;同时通过连接复用,提高并发处理能力。
  • 提高业务安全性:隐藏后端业务服务器的真实 IP 和端口信息,避免直接暴露在公网中,降低被攻击风险,
  • 功能扩展:可实现请求过滤、URL 重写、SSL 终结等功能,简化后端服务器的配置复杂度。

2. 核心配置语法

反向代理的核心是通过location 块配合proxy_pass 指令,将特定请求转发至后端服务器。

location URI {proxy_pass 后端服务器地址; 
}
  • URI:匹配路径:指定需要代理的客户端请求路径(如/mp3、/download);

  • proxy_pass 后端服务器地址; 指定请求转发的后端服务器地址(可包含 IP、端口及路径)

  • 后端服务器地址:实际访问地址

明确目标:代理服务器正确转发 + 后端服务器正确响应

(1)路径拼接规则

        Nginx 会自动将location中的匹配路径与proxy_pass的后端地址拼接,拼接方式取决于后端地址是否以斜杠结尾:

  • 若后端地址无斜杠(如http://192.168.140.11/music),客户端请求路径会直接拼接在后端路径后;
  • 若后端地址有斜杠(如http://192.168.140.11/music/),客户端请求路径会替换location的匹配路径后拼接。
  • location /test1 {

            proxy_pass http://aa.linux.com;   //nginx的反向代理,hosts文件需要加上dns解析

    }

    192.168.140.10/music    // 192.168.140.10的网页目录(/var/www/html)下的music文件

    192.168.140.10:8088/music   //若nginx换端口   

(2)不同场景下的配置示例

    场景 1:带 URI 的精确匹配转发
    当访问 Nginx 的任意路径时,代理到后端服务器的/music3 路径:

    location / {proxy_pass http://192.168.140.20/music3;
    }
    # 说明:当客户端访问 Nginx 服务器的任意路径(例如http://你的Nginx地址/xxx)时,
    # Nginx 会将该请求转发到 http://192.168.140.20/music3 对应的服务,
    # 并将后端服务的响应返回给客户端。

    场景 2:不带 URI 的路径转发
    当后端服务器没有特定 URI 时,Nginx 会将 location 中的 URI 拼接到后端地址:

    location /test {proxy_pass http://192.168.140.10;
    }
    # 说明:此时请求http://nginx-ip/test/xyz会被转发为http://192.168.140.10:9000/test/xyz
    

    场景 3:正则表达式匹配的特殊规则
    当 location 使用正则表达式(~~*)匹配请求时,proxy_pass后的后端地址不允许包含任何 URI,否则会报错:

    # 正确配置(无URI)
    location ~ /music {proxy_pass http://192.168.140.10;
    }# 错误配置(包含URI,会导致Nginx启动失败)
    # location ~ /music {
    #     proxy_pass http://192.168.140.10/project;  # 此处错误
    # }
    

    3. 后端服务器记录客户端真实 IP

    默认情况下,后端服务器会将 Nginx 的 IP 识别为客户端 IP,如需记录真实客户端 IP,需通过以下配置实现:

    (1)Nginx 反向代理添加标识字段

    在代理规则中添加X-REAL-IPX-Forwarded-For字段,传递客户端真实 IP:

    location /mp3 {proxy_pass http://192.168.140.11/music;# 传递客户端真实IP给后端proxy_set_header X-REAL-IP $remote_addr;# 若后端为多代理架构,使用X-Forwarded-For记录代理链proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    (2)
    ① 后端为 Apache(httpd)时的配置

    修改 Apache 的日志格式,使其解析X-REAL-IP字段:

    # 在httpd.conf中修改combined日志格式
    LogFormat "%{X-REAL-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    

    ② 后端为 Nginx 时的配置

    修改后端 Nginx 的日志格式,使用$http_x_forwarded_for获取真实 IP:

    # 在后端Nginx的main日志格式中添加
    log_format main '$http_x_forwarded_for [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';


    文章转载自:

    http://8MDDLnts.bwznL.cn
    http://7LhrbKDl.bwznL.cn
    http://Ud8AFGpp.bwznL.cn
    http://CpLAg9Ix.bwznL.cn
    http://zDzxUpd1.bwznL.cn
    http://eOrxcIzV.bwznL.cn
    http://YVvAIMPX.bwznL.cn
    http://4VNkQcrq.bwznL.cn
    http://CcYRrgPS.bwznL.cn
    http://AKsCvP15.bwznL.cn
    http://17l6629Y.bwznL.cn
    http://ibJnIaww.bwznL.cn
    http://vQQqj9CI.bwznL.cn
    http://CsES65Ma.bwznL.cn
    http://XuKjTVdj.bwznL.cn
    http://XjjBgP50.bwznL.cn
    http://rbc3vfuq.bwznL.cn
    http://qrGpxl7I.bwznL.cn
    http://HpGCdP32.bwznL.cn
    http://3SE4cO9F.bwznL.cn
    http://jDyvS4ua.bwznL.cn
    http://50kgnBX2.bwznL.cn
    http://APbSLmW8.bwznL.cn
    http://iQfJqV3i.bwznL.cn
    http://WS3jgemT.bwznL.cn
    http://uBj47s1p.bwznL.cn
    http://Yu2GLqAE.bwznL.cn
    http://cehTCVYn.bwznL.cn
    http://8DlKPXaD.bwznL.cn
    http://OExChT3C.bwznL.cn
    http://www.dtcms.com/a/373243.html

    相关文章:

  • 【多线程案例】:单例模式
  • JavaSE 异常从入门到面试:全面解析与实战指南
  • 浮动交易策略
  • 在云手机当中有哪些靠谱的平台?
  • django跨域配置
  • 工控机创新驱动为工业升级注入科技强心剂
  • AI Agents with n8n: 10+ 自动化创意路线图
  • 【计算机视觉】图像中的高频信息,和低频信息指的是什么?
  • 光伏助力碳中和:智慧运营平台如何精准计算与追踪减排贡献?
  • 计算机视觉 (CV) 基础:图像处理、特征提取与识别
  • 网络身份安全防线:身份证实名认证接口-网络社交身份安全
  • 某互联网大厂的面试go语言从基础到实战的经验和总结
  • 软件设计师备考-(十六)数据结构及算法应用(重要)
  • flutter日期选择国际化支持
  • 最短路算法和最小生成树算法详解
  • 2005–2021年中国城市级终端能源消费(含可再生能源)综合数据集
  • Redis入门(部署、持久化、缓存问题)
  • 聊一聊 .NET 中的 CompositeChangeToken
  • 视觉语言模型应用开发——Qwen 2.5 VL模型视频理解与定位能力深度解析及实践指南
  • 深入理解 MDC(Mapped Diagnostic Context):日志记录的利器
  • 工业相机如何通过光度立体成像技术实现高效精准的2.5D缺陷检测
  • qt+halcon开发相机拍照软件步骤
  • cs61A lab01
  • 大数据毕业设计选题推荐-基于大数据的国家医用消耗选品采集数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • Oracle APEX 利用卡片实现翻转
  • Spring Security AuthenticationManager 接口详解与实战
  • 人机协同的智慧共生平台:跨学科知识中心暨融智中心,从认知到实践的闭环自动转化
  • AG32 ( MCU+FPGA二合一 )是如何卷入了三相电能计量市场的
  • 2025年- H119-Lc88. 合并两个有序数组(数组)--Java版
  • 树莓派 Ubuntu 24.04 开机换源总结