首页 > 系统相关 >Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现

Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现

时间:2024-09-04 09:53:18浏览次数:11  
标签:addr Forwarded remote forwarded IP Nginx proxy 客户端

$remote_addr

代表客户端IP。注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端。假设用户请求过程如下:

用户客户端--发送请求->Nginx1 --转发请求-->Nginx2->后端服务器

那么,默认情况下,针对Nginx1而言,$remote_addr为用户客户端IP,对Nginx2而言,$remote_addr则为Nginx1的IP。此时如果希望Nginx2也可以获取用户客户端IP,那要怎么处理呢?答案如下:

在Nginx1配置文件中使用proxy_set_header为转发请求设置请求头

1 2 proxy_set_header X-Real-IP $remote_addr; // X-Real-IP 为请求头名称,可自定义

然后,在Nginx2 配置文件中通过$http_x_real_ip来获取X-Real-IP请求头的值来获取真实客户端IP.

此时,如果要求“后端服务器”也要获取用户客户端IP,咋处理呢?做法和上述类似,在Nginx2配置文件中,使用proxy_set_header做同样的配置,即:

1 proxy_set_header X-Real-IP $remote_addr;

然后,“后端服务器”获取请求头“X-Real-IP”的值即为用户客户端IP。

很多HTTP代理会在HTTP协议头中添加X-Forwarded-For头,用来追踪请求的来源。X-Forwarded-For的格式如下:

X-Forwarded-For包含多个IP地址,每个值通过逗号+空格分开,最左边(client1)是最原始客户端的IP地址,中间如果有多层代理,每一层代理会将连接它的客户端IP追加在X-Forwarded-For右边。

$proxy_add_x_forwarded_for

代表附加$remote_addr变量的客户端请求头X-Forwarded-For ,其值如果包含多个地址,用逗号+空格分隔,标准格式如下:

1 2 X-Forwarded-For: clientIP, proxyIP1, proxyIP2 # 最左边的clientIp即为客户端真实IP

如果X-Forwarded-For字段没出现在客户端请求头,$proxy_add_x_forwarded_for 等同于$remote_addr 变量。

这里,假设用户请求过程和上文所述一样,如下:

用户客户端--发送请求->Nginx1 --转发请求-->Nginx2->后端服务器

假设,仅在Nginx1配置文件中进行了以下配置

1 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

那么,Nginx2配置的X-Forwarded-For请求头的值即为clientIP,当然,这个结论的前提是,客户端IP没有配置X-Forwarded-For请求头,因为如上所述,客户端没有出现这个请求头时,$proxy_add_x_forwarded_for 的值即为$remote_addr 变量的值,否则,则是客户端为X-forwarded-for请求头的实际值。

接着,假设Nginx2配置文件也进行以下配置

1 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

那么,“后端服务器”获取的X-Forwarded-For请求头的值将为clientIP, Nginx1IP。也就是说以上命令的执行是个叠加的过程(类似Python的列表的append方法的处理过程),可以简单理解为如果存在上级代理,执行以上命令时,会把上级代理IP追加到X-Forwarded-For请求头总,否则把客户端IP $remote_addr、或者客户端X-Forwarded-For请求头的值(如果有的话)追加到X-Forwarded-For请求头中。

参考连接:

https://nginx.org/en/docs/http/ngx_http_core_module.html#var_remote_addr

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#var_proxy_add_x_forwarded_for

到此这篇关于Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现的文章就介绍到这了,更多相关Nginx $remote_addr和$proxy_add_x_forwarded_for 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

标签:addr,Forwarded,remote,forwarded,IP,Nginx,proxy,客户端
From: https://www.cnblogs.com/cheyunhua/p/18395895

相关文章

  • Nginx中的limit_req模块和limit_conn模块详解
    引言在高流量场景下,良好的限流和连接控制策略至关重要,以防止服务器过载,确保服务稳定性和高可用性。Nginx提供了limit_req和limit_conn模块,用以实现请求频率和并发连接数的限制。本文将详细介绍这两个模块的生效阶段和生效范围,并提供实际配置示例,解释相关指令的作用。limit_re......
  • Nginx中的 限流和屏敝版本号
    server{location/{#应用请求频率限制配置limit_req模块用于限制客户端请求的频率,以防止单一客户端占用过多服务器资源,提升稳定性。#zone=one引用名为"one"的共享内存区域#burst=10允许短时间内突发最多10个请求#nodela......
  • 前端Vue项目iHRM人力资源后台管理从Vue模板到整体开发Nginx部署上线
    前端Vue项目iHRM人力资源后台管理:‌从Vue模板到整体开发Nginx部署上线引言随着企业信息化的不断深入,‌人力资源管理系统的自动化和智能化成为企业提升管理效率的重要手段。‌本文将详细介绍一个基于Vue.js开发的人力资源后台管理系统(‌iHRM)‌的完整开发流程,‌包括从Vue模板的选......
  • Nginx:长短连接
    g学习自:通过nginx理解什么是长连接和短连接-寻梦99-博客园 0、前言C/S通信连接分为短连接、长连接。HTTP请求、响应通常采用短连接。TCP通信可以根据需要选择短连接、长连接。长连接C端和S端建立持久连接,用于传输多个请求、响应。在一次连接中,可以进行多次通信而无......
  • Vue3+NestJS+Vite4+TS4+Mysql8+Nginx全栈开发企业级管理后台
    vite打包快的原因:冷启动1.esbuild构建依赖,go语言编写多线程打包。2.原生的esm方式提供源码,浏览器分担了一部分工作。HMR热更新1.缓存机制,利用浏览器http头部,源码模块请求根据304协商缓存和依赖模块请求通过强缓存(cache-control:max-age=315360000,public,immutable)只是模块......
  • nginx部署前端vue项目
    Nginx部署前端Vue项目的技术分析引言在现代Web开发中,Vue.js作为一种流行的前端框架,被广泛应用于构建单页面应用(SPA)。然而,将Vue项目部署到生产环境时,通常需要依赖一个高效的Web服务器来提供服务。Nginx,作为一个高性能的HTTP和反向代理服务器,因其稳定性、易用性和丰富的功能特......
  • nginx服务器如何配置多虚拟站点及其它
    nginx服务器如何配置多虚拟站点,操作如下:1、配置文件目录:除了nginx服务器根目录下的nginx.conf文件外,其它多站点一般配置在目录"conf/vhost"下,演示如下:目录图:目录列表图:站点配置文件以“.conf”为后缀,名称一般按域名来起就可以了,多站点创建不同的.conf文件。2、配置站点,......
  • nginx的基本使用示例(负载均衡,虚拟主机,动静分离)的详细配置过程
    文章目录前言前置工作httpd主机tomcat主机nginx主机配置负载均衡配置过程效果展示虚拟主机配置过程效果展示动静分离配置过程排除思路前言本篇博客展示nginx的基本使用案例,后端由httpd+tomcat组成,linux版本:rocky9.2虚拟机ipnginx192.168.10.11httpd192.168......
  • Nginx:location、proxy_pass中的斜杠/
    学习自:nginxlocation/区别详解_nginx_脚本之家nginx的location与proxy_pass指令超详细讲解及其有无斜杠(/)结尾的区别_nginxlocation斜杠-CSDN博客nginx的location、root、alias指令用法和区别–蓝队云Nginx系列-5root和alias和index和try_files_nginxrootindex-CSD......
  • Nginx 部署前端 Vue 项目实战指南
    一、环境准备1.安装Nginx首先,需要在服务器上安装Nginx。Nginx是一款轻量级、高性能的HTTP和反向代理服务器。安装方式因操作系统而异。Linux系统(以Ubuntu为例):sudoapt-getupdatesudoapt-getinstallnginxWindows系统:从Nginx官方网站下载安装包,按......