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

vip与haproxy构建nginx高可用集群传递客户端真实ip

问题

系统使用了vip与haproxy实现高可用以及对nginx进行负载均衡,但是发现在上游的应用服务无法拿到客户端的请求ip地址,拿到的是主haproxy机器的ip,以下是nginx与haproxy的缩减配置:

location ~* ^/(xx|xx) {proxy_pass http://upsteam;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

haproxy配置,已缩减

frontend nginxmode tcpbind 0.0.0.0:443default_backend nginx_clusterbackend nginx_clustermode tcpbalance leastconnserver inst1 10.17x.xx.xx:4433

haproxy配置参考地址
https://www.haproxy.com/documentation/haproxy-configuration-tutorials/load-balancing/tcp/
haproxy版本:2.4.22
nginx版本:1.24.0

网络架构图

在这里插入图片描述

原因分析

因为haproxy为了提升性能使用了tcp模式转发,但是由于工作在第四层协议,不会解析到第七层的http包,所以无法直接将客户端ip传递给上游的Nginx。

解决方案

对haproxy与nginx采用proxy协议,haproxy通过send-proxy指令将客户端ip传递给上游nginx,nginx获取到客户端ip后将其写入调用上游应用的请求头中,配置如下

  1. haproxy
frontend nginxmode tcpbind 0.0.0.0:443default_backend nginx_clusterbackend nginx_clustermode tcpbalance leastconnserver inst1 10.17x.xx.xx:4433 send-proxy
  1. nginx
server {listen 4433 ssl default_server proxy_protocol;server_name  localhost;ssl_certificate "/etc/nginx/cert/xx.pem";ssl_certificate_key "/etc/nginx/cert/xx.key";charset utf-8;location ~* ^/(xx|xx) {proxy_pass http://upsteam;proxy_set_header X-Real-IP $proxy_protocol_addr;proxy_set_header X-Forwarded-For $proxy_protocol_addr;}
}

参考文档地址:
https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/#realip

http://www.lryc.cn/news/515801.html

相关文章:

  • Easticsearch介绍|实战?
  • Python图形界面(GUI)Tkinter笔记(二十一):Messagebox信息提示功能控件
  • vue3+ts+element-plus 表单el-form取消回车默认提交
  • Web Services 简介
  • Vue3苦逼的学习之路
  • AcWing练习题:两点间的距离
  • 文献分享:RoarGraph——跨模态的最邻近查询
  • 故事可视化AI
  • 【机器学习篇】从新手探寻到算法初窥:数据智慧的开启之门
  • ffmpeg八大开发库
  • 【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题
  • Linux上安装配置单节点zookeeper
  • 现代光学基础-1
  • pytorch中nn.Conv2d详解及参数设置原则
  • T-SQL语言的正则表达式
  • UDP_TCP
  • Python 中常见的数据结构之二推导式
  • STM32 拓展 低功耗案例3:待机模式 (hal)
  • 【开源社区openEuler实践】探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石
  • C++ hashtable
  • JS (node) 的 ACM 模式 + debug方法 (01背包为例)
  • vue设计与实现-框架设计
  • Stable Diffusion和Midjourney有什么区别?
  • 即插即用,无痛增强模型生成美感!字节跳动提出VMix:细粒度美学控制,光影、色彩全搞定
  • 面向对象分析和设计OOA/D,UML,GRASP
  • 【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等
  • 30分钟学会HTML
  • 服务器信息整理:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统
  • Golang设计模式目录
  • 选择IT驻场外包公司,要找有哪些资质的公司