点赞
评论
收藏
分享
举报
nginx反向代理如何获取真实IP?
发表于2020-10-12 14:45

浏览 692

文章标签

由于客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址。

1、安装--with-http_realip_module
要想在程序中取得真实的IP,需对nginx重新编译,新增--with-http_realip_module选项,操作如下:

cd /home/xxx/dev/nginx-1.10.2/ ./configure --with-http_realip_module make make install

#查看--with-http_realip_module是否安装成功

cd /usr/local/nginx/sbin sudo ./nginx -V

注意:安装前nginx记得先关闭,安装完毕再重启。

2、相关配置

location / { proxy_pass http://lotmall; proxy_buffering on; set_real_ip_from 192.168.1.118; #指定接收来自哪个代理发送的IP head,可以是单个IP或者IP段 real_ip_header X-Real-IP; proxy_connect_timeout 30; proxy_read_timeout 30; proxy_send_timeout 30; }

3、nginx打印用户真实IP

http { log_format main '$proxy_add_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /usr/local/nginx/logs/access.log main; }

 因为默认用的$remote_addr打印的是代理服务器的IP,我们不需要这个,所以我们使用代替了它的$http_x_forwarded_for 就可以打印出真实用户的IP了。

4、Java获取客户端真实IP方法

/** * 请求获取客户端的真实IP地址 * * @param request * @return * @author jqlin String getRealIpAddress(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { { InetAddress inet = InetAddress.getLocalHost(); ipAddress = inet.getHostAddress(); } catch (UnknownHostException e) { log.error("根据网卡获取本机配置的IP异常", e); } } } (ipAddress != null && ipAddress.indexOf(",") > 0) { // "***.***.***.***".length() ipAddress = ipAddress.split(",")[0]; } return ipAddress; }

已修改于2023-03-08 02:19
创作不易,留下一份鼓励
0守望0

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
0守望0
这家伙很懒还未留下介绍~
1
文章
1
问答
1
粉丝
相关文章
转载:https://segmentfault.com/a/1190000013075129?utm_source=sf-related  原文作者:Yujiaao前言在与第三方系统进行接口开发时,需要不断的改进和测试,以常见的微信登录支付和Alipay支付和登录为例.相对来讲Alipay做起来容易一些,一是接口SDK封装的简单一些,对老接口也相对友好,文档的岐义少.微信就不那么容易了.出于安全的考虑,微信的商户ID授权回调和支付回调只允许后台配置的一个地址,看上去可以加,但在我有限的经验里,加了也不管用.有时间吐槽,不如花时间想其他办法搞定.借助于万能的nginx反向代理功能,我们就把测试的和正式环境的配置通一个域名地址,但不同参数的方式搞定了.使用场景- 微信的测试假设你和一个正式服务器,如bixuebihui.com,还有一个测试用的,dev.bixuebihui.com,正式的微信回调路径是 https://bixuebihui.com/pay,测试的路径是 https://de
点赞 6
浏览 835
upstreamkibana_server{server192.168.72.204:5601weight=1max_fails=3fail_timeout=60;}server{listen80;server_name192.168.72.100;auth_basic"RestrictedAccess";auth_basic_user_file/etc/nginx/httppass.txt;location/{proxy_passhttp://kibana_server;proxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection'upgrade';proxy_set_headerHost$host;proxy_cache_bypass
点赞 0
浏览 762
你想不想拥有一个yyds.xxx.com这样的爆款域名来访问你的博客主页?跟着本教程的节奏,手把手来教你,待你了解了nginx反向代理的原理,你也一样可以拥有!请看下面的效果图:怎么样?是不是有点秀啊?哈哈哈,赶紧学起来啊!教程戳链接:保姆级教程教你配置域名跳转看完教程,你一定会说nginx,YYDS!!!
点赞 0
浏览 527