图解 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
闵性蜂胶: 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 /*