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

广州天河网站开发公司微信号管理系统

广州天河网站开发公司,微信号管理系统,浙江seo关键词,免费微信小程序开发官网问题现象 我们的平台使用Spring Cloud微服务架构#xff0c;使用Spring Boot构建Java服务#xff0c;使用google的jib插件打成docker镜像包我们使用docker虚拟化部署#xff0c;使用docker-compose统一管理所有服务#xff0c;包括Java服务和nginx等组件我们前后端分离使用Spring Boot构建Java服务使用google的jib插件打成docker镜像包我们使用docker虚拟化部署使用docker-compose统一管理所有服务包括Java服务和nginx等组件我们前后端分离前端通过nginx访问我们的网关Spring Cloud Gateway再转发到对应的Java服务我们需要记录一些基础业务数据变动日志于是在过滤器里拦截对应请求记录日志在记录操作的来源ip时记录了一个172.18.0.x的地址这个明显不是实际客户端来源的ip 排查解决 我们使用getRemoteAddres(request)获取的ip地址按理说是能获取到客户端的真实ip地址的地址不对想着从request的header里直接获取参考网上的方法查看哪个header参数里有ip地址 log.info(X-Real-IP{}, request.getHeader(X-Real-IP));log.info(X-Original-Forwarded-For{}, request.getHeader(X-Original-Forwarded-For));log.info(X-Forwarded-For{}, request.getHeader(X-Forwarded-For));log.info(x-forwarded-for{}, request.getHeader(x-forwarded-for));log.info(Proxy-Client-IP{}, request.getHeader(Proxy-Client-IP));log.info(WL-Proxy-Client-IP{}, request.getHeader(WL-Proxy-Client-IP));log.info(HTTP_CLIENT_IP{}, request.getHeader(HTTP_CLIENT_IP));log.info(HTTP_X_FORWARDED_FOR{}, request.getHeader(HTTP_X_FORWARDED_FOR));结果发现只有X-Forwarded-For能获取到地址还是那个错误的172.18.0.x的地址 地址不对应该是哪里出了问题可能是docker网络、nginx代理或者gateway网关 进一步排查这个地址之前看到过172.1x.0.x是docker网络生成的ip地址 使用docker命令docker network ls查看了docker网络后发现我们确实用的是这个 继续查看各个docker服务的ip确定下这个ip是哪个服务的具体来说是nginx的、gateway的还是具体的这个Java应用的 使用docker exec -it 服务名 /bin/bash进入docker容器内部使用cat /etc/hosts查看网络配置 对比发现这个ip是nginx服务的说明获取客户端远程地址时获取到了nginx的ip nginx是决定能获取到正确的客户端请求ip地址的因为它的log日志输出里是有来源ip的 修改nginx配置 查看了nginx的配置文件default.conf发现里面没有其他配置已有的X-Forwarded-For配置为proxy_set_header X-Forwarded-For $proxy_protocol_addr;这里直接把nginx代理服务自己的地址赋给了X-Forwarded-For所以我们获取到的是nginx的地址我们现在需要做的主要是在主配置文件添加一行proxy_set_header X-Real-IP $remote_addr;将客户端的真实ip地址赋给X-Real-IP执行命令docker restart nginx重启nginx使其生效 Java代码 Java代码修改也很简单对应nginx的配置获取X-Real-IP即可 public static String getIpAddress(HttpServletRequest request) {String ip request.getHeader(X-Real-IP);if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) {ip request.getRemoteAddr();}return ip;}成功获取结束 nginx配置proxy_set_header介绍 在Nginx配置中proxy_set_header 指令是用于定义向代理服务器传递的请求头字段。该指令专门用于location块中并且通常配合 proxy_pass 指令一起工作proxy_pass 指令定义了代理服务器的协议和地址。 基本上当Nginx作为反向代理服务器时客户端的请求首先到达Nginx然后Nginx将这些请求转发到后端的上游服务器。在转发请求时Nginx可以设置或修改请求头。proxy_set_header 指令正是用来进行这样的设置或修改。 下面是几个proxy_set_header 常见用例 传递主机名 - 将客户端请求的原主机头信息传递到上游服务器。 proxy_set_header Host $host;传递真实IP地址 - 将客户端的真实IP地址传递给后端应用这在后端应用需要记录真实的客户端地址时非常有用。 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;传递HTTPS相关信息 - 当Nginx用作SSL终结时它可以告诉后端应用请求是通过HTTPS或HTTP进行的。 proxy_set_header X-Forwarded-Proto $scheme;用户的Worker处理状态: 有时应用程序可能需要知道客户端连接的具体状态。 proxy_set_header Connection $connection_upgrade;标准的 proxy_set_header 指令使用方法如下 proxy_set_header Header-Name Header-Value;Header-Name 是你希望设置的HTTP请求头名称。Header-Value 是对应的值它可能是一个固定的字符串也可以是Nginx提供的变量如 $remote_addr、$http_user_agent、$http_cookie 等。 注意默认情况下Nginx会使用某些标准请求头如Host、Connection等如果你没有明确使用proxy_set_header设置它们Nginx会传递它的默认值。 在调整Nginx作为反向代理服务器时正确配置proxy_set_header指令能确保后端服务器可以接收到所需的所有重要信息提供正确和安全的服务。
http://www.zqtcl.cn/news/170259/

相关文章:

  • 手机做网站过程网站名字做版权需要源代码吗
  • 公司微信网站建设方案现在做外贸前景如何
  • 如何使用微信公众号做网站河南省专业做网站公司
  • 清远市清城区网站建设公司广州黄浦区建设局网站
  • 站长做2个网站网站程序指的是什么
  • 网站建设jw100请拿笔记记下新域名
  • 兰州市住房保障和城乡建设局网站如何有效的推广网站
  • 网站推广做百度还是360北京企业网站建设费用
  • 推荐一个简单的网站制作策划方案免费网站
  • 用vs2012做网站案例企业现在有必要做网站吗
  • 网站建设少用控件wordpress默认分类
  • php网站是什么数据库文件网站开发收
  • 新网网站空间做网站和app哪类商标
  • drupal网站建设数据库厦门市网站建设
  • 解释微信微网站室内设计效果图展板
  • 教做发绳的网站游戏网站建设需要多少钱
  • 那个网站可以做双色球号码对比的网站设计好学吗
  • 网站建设如何获取客户韩国建筑网站
  • 固始网站建设公司wordpress会员功能
  • 在哪找做调查赚钱的网站好自己做网站的成本
  • 网站开发职业xshuan主题wordpress
  • 网站代码框架建设网站需要学什么程序
  • 广州搜索seo网站优化企业邮箱密码忘了怎么重置密码
  • 重庆模板网站建设做新房网站怎么弄
  • 深圳做企业网站公司常用的网络营销方式
  • 建设网站公司怎么建站网站开发笔记
  • 网站网页建设论文惠州建设网站公司
  • 中介做网站的别打电话有没有教做健身餐的网站
  • 山东电力建设网站雷州市网站建设
  • 企业网站的意义公司网站建app