Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现

 更新时间:2024年08月21日 10:51:49   作者:授客  
本文主要介绍了Nginx $remote_addr和$proxy_add_x_forwarded_for变量的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

$remote_addr

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

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

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

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

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做同样的配置,即:

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 ,其值如果包含多个地址,用逗号+空格分隔,标准格式如下:

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

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

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

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

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

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配置文件也进行以下配置

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 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx优化服务之网页压缩的实现方法

    Nginx优化服务之网页压缩的实现方法

    这篇文章主要介绍了Nginx优化服务之网页压缩的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Nginx Location指令URI匹配规则详解小结

    Nginx Location指令URI匹配规则详解小结

    这篇文章主要介绍了Nginx Location指令URI匹配规则详解小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • filebeat同时收集错误日志与普通日志并存详解

    filebeat同时收集错误日志与普通日志并存详解

    这篇文章主要为大家介绍了filebeat同时收集错误日志与普通日志并存详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Nginx反向代理后台报404遇到的解决方法

    Nginx反向代理后台报404遇到的解决方法

    Nginx反向代理404错误通常是由服务器配置不正确、文件路径不正确、文件权限不正确、文件名大小写不正确等,本文主要介绍了Nginx反向代理后台报404遇到的解决方法,感兴趣的可以了解一下
    2023-11-11
  • Nginx服务器下防盗链的方法介绍

    Nginx服务器下防盗链的方法介绍

    这篇文章主要介绍了Nginx服务器下防盗链的方法介绍,主要通过修改服务器的配置文件来实现,需要的朋友可以参考下
    2015-07-07
  • 教你在容器中使用nginx搭建上传下载的文件服务器

    教你在容器中使用nginx搭建上传下载的文件服务器

    这篇文章主要介绍了容器中使用nginx搭建支持上传下载的文件服务器,在这需要注意为了让nginx支持文件上传,需要下载并运行带有nginx-upload-module模块的容器,需要的朋友可以参考下
    2022-05-05
  • nginx访问返回504问题及解决

    nginx访问返回504问题及解决

    这篇文章主要介绍了nginx访问返回504问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • centos7下基于nginx+uwsgi部署Django项目的实现

    centos7下基于nginx+uwsgi部署Django项目的实现

    Django是一个开源的Web应用框架,使用Python语言编写,主要用于搭建Web项目,本教程介绍如何在centos7下基于nginx+uwsgi部署Django项目的实现,感兴趣的可以了解一下
    2024-04-04
  • 详解nginx日志定时备份和删除

    详解nginx日志定时备份和删除

    本篇文章主要介绍了nginx日志定时备份和删除 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Windows系统中Nginx下载安装部署教程(实测有效)

    Windows系统中Nginx下载安装部署教程(实测有效)

    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,下面这篇文章主要给大家介绍了关于Windows系统中Nginx下载安装部署的相关资料,需要的朋友可以参考下
    2024-08-08

最新评论