图解 nginx 如何获取真实的来源 IP

作者&投稿:丑曲 (若有异议请与网页底部的电邮联系)
~

$remote_addr :这是 nginx 中的一个变量,是 理论上 请求来源的 IP 地址
$direct_ip :这是为例方便理解本文虚构的一个变量名,表示向 nginx 直接发起请求的客户端的真正 IP 地址

$direct_ip 是 无法伪造 的,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。
一般来说 $remote_addr 就等于 $direct_ip ,我们通常也就是这样直接地判断请求来源。
但是,在多层反向代理的架构中,这个 $direct_ip 往往是一台内部服务器的 IP,不能真实的反应请求的来源,如下图:

为此,在 nginx 中的 $remote_addr 取值专门设计了特定的逻辑
有三个重要变量可在 nginx 中配置:

set_real_ip_from :默认为空,可设置为任意 IP 或 IP 段,实例中的 0.0.0.0/0 表示覆盖了所有网段
real_ip_header :默认值是 X-Real-IP,可以设置为任意字符串,一般建议改用 X-Forwarded-For,下面也均以 X-Forwarded-For 为例
real_ip_recursive :默认为 off,可设 on / off 两种值

网上介绍 $remote_addr 取值逻辑的文章有很多,此文不做赘述。
我们今天就单用一张图来解释下这个流程(点击图片查看大图):

服务端 nginx 配置:

上一级代理发来请求:

理论上真实来源 IP:
$remote_addr = 2.2.2.2

在多层反向代理的架构中,每一个 nginx 节点最好都添加上如下配置条目:

https://blog.csdn.net/qq_33101675/article/details/79013248 (红字部分解释得好)
https://www.jianshu.com/p/15f3498a7fad




松滋市15216575563: nginx+tomcat获取真实ip 怎样测试 -
闵性蜂胶: nginx+tomcat获取真实ip 怎样测试 {{item.status}}是一种单项数据绑定.{{item.status}} 在controller中是使用$scope定义的.你可以使用ng-module进行双向数据绑定.这个时候,当界面中数据变化,controller中的这个数据同时变化就可以取到数值...

松滋市15216575563: nginx查看访问用户的真实ip地址,查看哪个日志文件 -
闵性蜂胶: /var/log/nginx.log

松滋市15216575563: 前端Nginx,后端Apache整合PHP如何获取真实IP?
闵性蜂胶: 楼主的情况 我可以解答,我们原来用nginx做代理,代理后端的apache,结果评论的ip全是一样的,也就是都是代理的ip,呵呵,你想要的就是这样的结果吧 nginx 配置下面就会得到客户的真实ip proxy_set_header X-Real-IP $remote_addr; proxy...

松滋市15216575563: 使用Nginx如何配置Tomcat访问日志记录真实IP -
闵性蜂胶: 使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一个新的Header源码天空 ,用来存储$re...

松滋市15216575563: 用户访问经过cdn,怎么才能在nginx的日志中 要拿到用户ip -
闵性蜂胶: 第一、修改Nginx.conf文件/usr/local/nginx/conf/ 一般是在这个目录中有一个nginx.conf文件,我们需要添加http中下面脚本:log_format access '$http_x_forwarded_for - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_...

松滋市15216575563: nginx内置变量如何获取完整的请求url -
闵性蜂胶: 可以利用 $request_uri来获取原始的带参数的完整的请求url.

松滋市15216575563: php负载均衡 下面怎么得到真实ip -
闵性蜂胶: 如果负载均衡器是nginx,在nginx中加一个请求头,例如 proxy_set_header X-FORWARDED-FOR $remote_addr; php接收ip就用这个$_SERVER[''HTTP_X-FORWARDED-FOR'']

松滋市15216575563: 如何获取nginx反向代理域名 -
闵性蜂胶: nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中.

松滋市15216575563: 如何从一个nginx的http请求中获取server端地址 -
闵性蜂胶: 在处理一个http请求的时候,很少会使用到本地地址,所以nginx为了节省这段空间,故默认不初始化本地地址,而是在具体需要的时候,再通过提供的接口去主动获取,这样一来节省了空间,又在需要的时候能够快速的获取.这是一个不错的折中.

松滋市15216575563: 如何在nginx中读取POST上来的数据 -
闵性蜂胶: 1.框架搭建 1.1 将struts2中的jar文件导入到项目中 commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,freemarker-2.3.15.jar,ognl-2.7.3.jar struts2-core-2.1.8.1.jar,xwork-core-2.1.6.jar 1.2 将struts.xml文件拷贝到项目的src目录下 1.3 修改web.xml文件 添加:struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /*

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网