nginx和proxy_protocol协议

news2024/10/6 18:36:01

目录

  • 1. 引言
  • 2. HTTP server的配置
  • 3. Stream server的配置
    • 3.1 作为proxy_protocol的前端服务器
    • 3.2 作为proxy_protocol的后端服务器

1. 引言

  proxy_protocol 是haproxy开发的一种用于在代理服务器和后端服务器之间传递客户端连接信息的协议。使用 proxy_protocol 的主要优势是能够准确地获取客户端的真实 IP 地址,而不受代理服务器的影响。这对于需要根据客户端 IP 地址进行访问控制、日志记录等操作的应用程序非常有用。目前有v1和v2两个版本。详细文件可以参见:https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

  proxy_protocol协议在一些主流的服务器上面得到了广泛的应用,如tomcat、mariadb、apache、HAPROXY等等。本文要介绍如何在nginx中开启对proxy_protocol的支持。

  nginx对于proxy_protocol协议的支持在HTTP服务和Stream代理服务上面是不一样的。对于前者它只能作为后端服务,支持利用proxy_protocol协议来获取客户端的IP。而对于stream代理,它则是作为前端来发起proxy_protocol的握手的。

2. HTTP server的配置

  对于http协议下的典型架构如下图:

在这里插入图片描述

  其中负载均衡服务器负责封装proxy_protocol报文传递客户端的信息,nginx服务器负责解析proxy_protocol的协议信息来获取客户端的信息,而应用服务器可以有或者没有,对于静态内容可能就只要nginx提供服务就可以了,而动态内容则需要应用服务器来负责。

  下面是给nginx的HTTP服务开启proxy_protocol功能支持的配置,如下:

http {
    log_format combined '$proxy_protocol_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';
    #...

    server {
        server_name localhost;

        listen 80   proxy_protocol;
        listen 443  ssl proxy_protocol;

        ssl_certificate      /etc/nginx/ssl/public.example.com.pem;
        ssl_certificate_key  /etc/nginx/ssl/public.example.com.key;

        location /app/ {
            proxy_pass       http://backend1;
            proxy_set_header Host            $host;
            proxy_set_header X-Real-IP       $proxy_protocol_addr;
            proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        }
    }
}

  其中两个listen语句中均添加了"proxy_protocol"的属性,表示对于监听的端口,在新建连接的时候会进行proxy_protocol协议的握手处理。
  对于下面这两行配置:

	proxy_set_header X-Real-IP       $proxy_protocol_addr;
    proxy_set_header X-Forwarded-For $proxy_protocol_addr;

  则用于告诉nginx在发起向后端应用服务器发起请求的时候,会在HTTP请求头中添加X-Real-IP和X-Forwarded-For两个请求头,并都设置其为通过解析Proxy protocol协议头中得到的客户端的真实地址“$proxy_protocol_addr"。

  最后,对于访问日志,也会记录客户端的真实IP地址,如下:

    log_format combined '$proxy_protocol_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';

  在访问日志的格式模板里面也设置了$proxy_protocol_addr 变量用来获取客户端的真实IP。

  至此,nginx就能够在收到http请求的时候首先进行proxy_protocol的握手。当然,在开启proxy_protocol协议支持的时候,请确保nginx的前端也同样配置了proxy_protocol协议,否则nginx会无法正好工作。
  这可以通过下面nginx源码得到证明:


u_char *
ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT获取最小化,最大化,关闭窗口事件

QT获取最小化,最大化,关闭窗口事件 主程序头文件: 实现: changeEvent,状态改变事件 closeEvent触发点击窗口关闭按钮事件 其代码它参考: /*重写该函数*/ void MainWindow::changeEvent(QEvent *event) {…

蚓链数字化营销生态的影响力分享!

​家人们,今天来给大家分享一些关于数字化平台生态化对数字营销影响的具体案例。 比如某电商平台,通过生态化的建设,实现了精准的推荐算法。根据用户的浏览历史和购买行为,为他们推荐最符合需求的商品,大大提高了购买…

JeeSite 快速开发平台 Vue3 前端版介绍

JeeSite 快速开发平台 Vue3 前端版介绍: 它构建于 Vue3、Vite、Ant-Design-Vue、TypeScript 以及 Vue Vben Admin 等最前沿的技术栈之上,能助力初学者迅速上手并顺利融入团队开发进程。涵盖的模块包括组织机构、角色用户、菜单授权、数据权限、系统参数…

小程序开发平台——超级万能DIY商城小程序源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 超级万能 DIY 商城小程序源码系统是一款集前端和后端分离的强大工具,为开发者提供了一站式的解决方案。它不仅具备完整的安装代码包,还附带详细的搭建教程,让即使是没有丰富技术经验的开发者也能轻松上手,快速构建自己的…

Vue3实战笔记(56)—实战:DefineModel的使用方法细节

文章目录 前言一、实战DefineModel二、思考原理总结 前言 今天写个小例子&#xff0c;实战DefineModel的使用方法细节 一、实战DefineModel 上文官方说的挺清楚&#xff0c;实战验证一下&#xff0c;新建DefineModel.vue&#xff08;这是儿子&#xff09;&#xff1a; <te…

珠海鸿瑞毛利率持续下滑:核心产品销量大降,偿债能力偏弱

《港湾商业观察》黄懿 日前&#xff0c;珠海市鸿瑞信息技术股份有限公司&#xff08;下称“珠海鸿瑞”&#xff09;收到了北京证券交易所发出的第三轮审核问询函。 此前&#xff0c;2020年11月&#xff0c;珠海鸿瑞曾向深交所报送上市申请。IPO申请文件获受理后&#xff0c;珠…

MySQL8 全文索引

文章目录 创建索引使用索引总结 创建索引 之前未尝试过使用MySQL8的全文索引&#xff0c;今天试一试看看什么效果&#xff0c;否则跟不上时代了都。   创建索引非常简单&#xff0c;写句SQL就行。 create table goods(id integer primary key auto_increment,name varchar(2…

知识图谱的应用---智能制造

文章目录 智能制造典型应用 智能制造 随着云计算、大数据、人工智能技术的快速发展&#xff0c;越来越多的新技术正在应用于传统工业领域&#xff0c;并在帮助企业实现产业转型、技术升级及效益提升方面起到了关键作用。目前在提升良品率方面&#xff0c;知识图谱通过深度计算所…

Selenium时间等待_显示等待

特点&#xff1a; 针对具体元素进行时间等待 可以自定义等待时长和间隔时间 按照设定的时间&#xff0c;不断定位元素&#xff0c;定位到了直接执行下一步操作 如在设定时间内没定位到元素&#xff0c;则报错&#xff08;TimeOutException&#xff09; 显示等待概念&#x…

【Python报错】已解决NameError: name ‘secrets‘ is not defined

解决Python报错&#xff1a;NameError: name ‘secrets’ is not defined 在使用Python进行安全编程时&#xff0c;我们经常需要使用secrets模块来生成安全的随机数。然而&#xff0c;如果你在尝试使用这个模块时遇到了NameError: name secrets is not defined的错误&#xff0…

【机器学习】机器学习与智能交通在智慧城市中的融合应用与性能优化新探索

文章目录 引言机器学习与智能交通的基本概念机器学习概述监督学习无监督学习强化学习 智能交通概述交通流量预测交通拥堵管理智能信号控制智能停车管理 机器学习与智能交通的融合应用实时交通数据分析数据预处理特征工程 交通流量预测与优化模型训练模型评估 智能信号控制与优化…

安装TPMmanager

sudo apt-get install qt4-qmake sudo apt-get install libqt4-dev下载TPMManager&#xff0c;解压之后拖入Ubuntu&#xff0c;进入目录 https://gitcode.com/Rohde-Schwarz/TPMManager/overview?utm_sourcecsdn_github_accelerator&isLogin1 cd tpmmanager-master qmake…

【Spring Cloud】Gateway 服务网关核心架构的执行流程和断言

文章目录 基本概念执行流程断言内置路由断言工厂自定义路由断言工厂 总结 基本概念 路由(Route)是gateway中最基本的组件之一&#xff0c;表示一个具体的路由信息载体。主要定义了下面的几个信息&#xff1a; id&#xff1a;路由标识符&#xff0c;区别于其他Route。uri&…

centos系统清理docker日志文件

centos系统清理docker日志文件 1.查看docker根目录位置2.清理日志 1.查看docker根目录位置 命令&#xff1a;docker info ,将Docker Root Dir 的值复制下来。如果目录中包含 等特殊符号的目录&#xff0c;需要转义 2.清理日志 创建文件&#xff1a;vim docker_logs_clean.…

对GNSS辐射测试有疑问?德思特为您解答!

一、问题背景 在我们真实的环境中&#xff0c;GNSS信号是无处不在的&#xff0c;他通过从卫星辐射的形式覆盖地表。当我们想要使用GNSS模拟器进行测试时&#xff0c;一般有两种方式&#xff1a; ● 通过线缆直接连接待测件&#xff0c;无需额外环境与配置&#xff0c;即可进行…

问题:以下描写乡村词语的是() #媒体#媒体#知识分享

问题&#xff1a;以下描写乡村词语的是&#xff08;&#xff09; A&#xff0e;高楼林立 B&#xff0e;车水马龙 C&#xff0e;依山傍水 参考答案如图所示

智能售货机的商业潜力

智能售货机的商业潜力 1. 即时购物体验&#xff1a;在快节奏的生活中&#xff0c;人们往往缺乏闲暇去超市购物。智能售货机以其便捷性&#xff0c;提供了一种快速获取商品的方式&#xff0c;只需简单几步即可完成购买。 2. 全天候服务&#xff1a;智能售货机不受时间限制&…

黄金猛涨周大福却狂跌600亿搬厂裁员,年轻人血脉觉醒?

今年以来&#xff0c;有两样东西一直被吃瓜群众们津津乐道&#xff0c;一是AI的进化速度&#xff0c;二是黄金涨价的速度&#xff0c;并且时常霸占社交媒体热搜。‍‍‍‍‍‍‍‍‍ 尤其是黄金市场&#xff0c;更是一路上涨&#xff0c;快窜出天际了&#xff0c;不少吃瓜群众…

Qwen-2-7B和GLM-4-9B:“大模型届的比亚迪秦L”

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

车载以太网测试要测些什么呢?

车载以太网测试大致可以分成两块&#xff1a;TC8测试和以太网通信测试。 TC8测试全称TC8一致性测试&#xff0c;其规范由OPEN联盟制定&#xff0c;包括车载以太网ECU从物理层到应用层的各层互操作性以及常规基础功能服务。目的在于提高不同ECU之间的兼容性。 TC8测试规范可以…