当前位置: 首页 > wzjs >正文

江西网站建设河南自助建站seo公司

江西网站建设,河南自助建站seo公司,合肥网站建设ahyeda,周口网站建设网络工作室现象 领导反馈生产环境的用户ip有问题。登陆到这个页面,发现是所有的用户ip都是172.30.94.97,这是个内部网络ip. 排查过程 1 登陆到应用前端nginx, 查看nginx的请求日志 172.30.94.97 - - [17/Jul/2024:02:02:54 0000] "POST /***/n…

现象

领导反馈生产环境的用户ip有问题。登陆到这个页面,发现是所有的用户ip都是172.30.94.97,这是个内部网络ip.

排查过程

1 登陆到应用前端nginx, 查看nginx的请求日志

172.30.94.97 - - [17/Jul/2024:02:02:54 +0000] "POST /***/notify/my-page HTTP/1.1" 200 182 "/report/home?type=2&id=2612&lang=zh_CN" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" "10.72.44.200"
172.30.94.97 - - [17/Jul/2024:02:02:54 +0000] "POST /***/notify/my-page HTTP/1.1" 200 182 "/home?lang=zh_CN" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "10.49.140.102"
172.30.94.97 - - [17/Jul/2024:02:02:56 +0000] "POST /***/msg/notify/my-page HTTP/1.1" 200 59 "/user/message/info?lang=zh_CN" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "10.13.52.192"

发现第一列展示的ip正好是我们的Java应用代码拿到的iP,而真实的ip展示在最后一列

2 查看nginx的日志输出格式。第一列取的是remote_addr变量,说明这个变量是有问题的 。我们要取的是最后一列http_x_forwarded_for变量

log_format  main   '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

3 查看Java代码获取客户ip的逻辑。Java代码从6个Header变量中依次找可以用的ip。

    public static String getClientIP(HttpServletRequest request, String... otherHeaderNames) {String[] headers = new String[]{"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"};if (ArrayUtil.isNotEmpty(otherHeaderNames)) {headers = (String[])ArrayUtil.addAll(new String[][]{headers, otherHeaderNames});}return getClientIPByHeader(request, headers);} 

4 查看nginx传递过来了哪些Header变量。nginx传递过来了X-Real-IP和X-Forwarded-For,其中X-Real-IP取的是有问题的remote_addr。正好我们Java代码取到的是这个变量。

location ~ ^/(admin-api|rpc-api)/ {client_max_body_size 32m;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_pass http://***:30001;
}

5 根据第二步的分析,将remote_addr修改为http_x_forwarded_for
6 重启nginx,问题解决

K8S网络拓扑

在这里插入图片描述
所有的外部流量一定会通过一个ingress controller进入到K8S的内部。ingress controller的一个常见实现是Nginx,正好我们的k8s选择的就是Nginx。也就是说我们的业务前端nginx前面还有一个nginx。所以我们的前端nginx的remote_addr拿到的是k8s入口ingress的内部ip地址。

总结

用户请求经过两层nginx转发才到达后端java业务应用。remote_addr仅存储上一个转发节点的ip,所以我们的业务应用一直拿的是ingress的ip。http_x_forwarded_for存储的是原始用户的请求ip。

http://www.dtcms.com/wzjs/419878.html

相关文章:

  • iis7 二级目录安装wordpressseo和sem的区别是什么
  • 浏览器提醒 WordPressseo门户网
  • 新化 网站开发搜索引擎收录查询
  • 广州网站建设广州网站收录有什么用
  • 网页设计logo素材优化网站的步骤
  • 南昌做网站费用西安网站建设制作公司
  • 中国招标网官方网站优秀营销软文范例300字
  • 做外汇查哪个网站天津关键词优化平台
  • 刚开始做网站哪有免费空间企业网站建设方案模板
  • 兰州市住房保障和城乡建设局网站软件外包公司排行榜
  • 免费企业建站系统源码免费精准客源
  • 什么网站可以做公务员考试题玄幻小说排行榜百度风云榜
  • 乐清做手机网站热搜榜排名今日事件
  • 专业的网站设计建设如何提高网站排名的方法
  • 网站建设维护公司排名市场调研问卷调查怎么做
  • 怎样看出一个网站是那个公司做的文章优化软件
  • 支付网站建设费怎么做账东莞网络营销网络推广系统
  • 潍坊网站建设托管西安小程序开发的公司
  • 东乡网站建设百度一下百度知道
  • 杭州91网站建设网站seo提升
  • 知乎建站平台天津百度推广网络科技公司
  • 北京做兼职从哪个网站好上海百度推广排名优化
  • 商务网站开发作业南宁seo公司哪家好
  • 中英文对照网站怎么做百度 seo排名查询
  • 做动效很好的网站大数据营销案例
  • 网站域名是啥百度宁波营销中心
  • 网站改版不换域名怎么做成都自动seo
  • 公司网站改版网站网络营销推广
  • 海南省建设注册中心网站网络营销推广的5种方法
  • 视频网站切片怎么做免费推广方式都有哪些