nginx中获取真实ip
来源:互联网 发布:遗传算法实例 编辑:程序博客网 时间:2024/04/29 18:38
server {
listen 80;
server_name localhost;
location /{
root html;
index index.html index.htm;
proxy_pass http://backend;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-For $http_x_forwarded_for;
}
方案1
nginx这里作一个赋值操作,如下:
proxy_set_header X-real-ip $remote_addr;
其中这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:
request.getAttribute("X-real-ip")
方案2
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
我们先看看这里有个X-Forwarded-For变量,这是一个squid开发的,用于识别通过HTTP代理或负载平衡器原始IP一个连接到Web服务器的客户机地址的非rfc标准,如果有做X-Forwarded-For设置的话,每次经过proxy转发都会有记录,格式就是client1, proxy1, proxy2,以逗号隔开各个地址,由于他是非rfc标准,所以默认是没有的,需要强制添加,在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。也就是说在默认情况下我们使用request.getAttribute("X-Forwarded-For")获取不到用户的ip,如果我们想要通过这个变量获得用户的ip,我们需要自己在nginx添加如下配置:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getAttribute("X-Forwarded-For")获得的将会是客户端ip和第一台nginx的ip。
那么$proxy_add_x_forwarded_for又是什么?
$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr两部分,他们之间用逗号分开。
举个例子,有一个web应用,在它之前通过了两个nginx转发,即用户访问该web通过两台nginx。
在第一台nginx中,使用
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
现在的$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,于是赋值以后,X-Forwarded-For变量的值就是用户的真实的ip地址了。
到了第二台nginx,使用
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
现在的$proxy_add_x_forwarded_for变量,X-Forwarded-For部分包含的是用户的真实ip,$remote_addr部分的值是上一台nginx的ip地址,于是通过这个赋值以后现在的X-Forwarded-For的值就变成了“用户的真实ip,第一台nginx的ip”,这样就清楚了吧。
最后我们看到还有一个$http_x_forwarded_for变量,这个变量就是X-Forwarded-For,由于之前我们说了,默认的这个X-Forwarded-For是为空的,所以当我们直接使用proxy_set_header X-Forwarded-For $http_x_forwarded_for时会发现,web服务器端使用request.getAttribute("X-Forwarded-For")获得的值是null。如果想要通过request.getAttribute("X-Forwarded-For")获得用户ip,就必须先使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;这样就可以获得用户真实ip。
- nginx中获取真实ip
- nginx中获取真实ip
- nginx中获取真实ip
- nginx 获取真实IP
- Nginx获取真实用户IP
- nginx lua获取真实IP
- lighttpd获取nginx代理客户端真实IP
- nginx+tomcat整合后获取真实IP
- Nginx 教程- 获取真实IP模块 - http_realip_module
- nginx反向代理,node获取真实IP
- Nginx反向代理获取客户端真实IP
- Nginx反向代理获取客户端真实IP
- Nginx反向代理获取客户端真实IP
- Nginx获取真实IP模块http_realip_module
- tomcat 获取Nginx的真实用户IP
- nginx转发获取真实客户端IP地址
- nginx下获取客户端真实IP地址
- Nginx获取客户真实的IP地址
- C++ 线程安全的 单实例 模式
- Caused by: java.lang.OutOfMemoryError: Java heap space
- Windows内存管理(2)--Lookaside结构 和 运行时函数
- Android 去掉ListView/GridView下拉出空白回弹的效果
- elasticsearch获取java client实例
- nginx中获取真实ip
- JAVA获取本机网卡IP地址
- dgsd
- 笔试/面试题_算法
- 最受欢迎android开源项目---收藏地址
- Windows内存管理(3)--检查内存可用性,结构化异常处理 和 ASSERT
- System.String和System.Text.StringBuilder
- libevent
- myeclipse8.5如何配置多个tomcat