nginx反向代理后获取真实请求ip

2023-10-27

本来接口运行的好好的,后面为了规范接口,我在nginx加了如下代码

location ^~ /v1/api/ {
    proxy_pass https://xxx.xxx.xxx:8081/v1/api/;
}

后面重新部署后发现通过HttpServletRequest获取到的ip是服务器的ip,经过一番网上查资料,解决如下:

nginx配置

在location中加入如下配置:

location ^~ /v1/api/ {
    	# 加入下面三行是为了防止nginx反向代理后服务端无法正确获取到真实请求ip的问题
	    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 https://xxx.xxx.xxx:8081/v1/api/;
}
服务端获取ip修改

服务端获取ip的方法也需要进行一下改动

public static String getIp(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx反向代理后获取真实请求ip 的相关文章

随机推荐

  • 记录问题:This request has been blocked, the content must be served over HTTPS. 解决https和http混用导致的问题

    引起原因 前端项目部署在服务器上配置的域名是https的 而接口部署的服务器域名配置的是http的 HTTPS 是 HTTP over Secure Socket Layer 以安全为目标的 HTTP 通道 所以在 HTTPS 承载的页面上
  • Maven多模块项目编译失败:程序包xxx不存在

    1 用idea编译项目或者install时报错java程序包XXX不存在 我的idea是2021 3 2版本 2 解决办法 1 File gt settings gt Build Execution Deployment gt Build
  • python运行时将命令行在终端窗口输出的内容保存到文件

    Windows系统 python 文件名 py gt 日志名 log Linux系统 python 文件名 py tee 日志名 log 在运行程序代码时加入下面的示例内容 此时终端不显示输出内容 python u 文件名 py gt 日志
  • 经济学几个小点-20220719

    1 价值和使用价值 高跟鞋对需要的女人有用 对火车司机无用 使用价值 价值 一般劳动 时间等价 使用价值 对某某有用 生产者为了获得交换价值 消费者为了获得使用价值 2 供给和需求 沉没成本是一种历史成本 对当前决策而言是不可控成本 不会对
  • MSQL系列(一) Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/B+Tree

    Mysql实战 索引结构 二叉树 平衡二叉树 红黑树 BTree B Tree 我们在项目中都会使用索引 所以我们要了解索引的存储结构 今天我们就着重讲解下Mysql的索引结构存储模型 并且看下 二叉树 平衡二叉树 红黑树 BTree及B
  • struc2vec算法解析

    转载自链接
  • Humata的bug记录【unsolved】

    项目场景 使用Humata 在上传PDF文档步骤出现问题 问题描述 使用UPLOAD按钮进行文件提交会报错 使用拖拽则不会出现该问题 原因分析 解决方案
  • js作用域

    一 js没有块级作用域 在c java等语言中花括号里的代码都有自己的作用域 而js花括号没有块级作用域 经常会导致一些困惑 不明所以 例如 console info color if true var color blue console
  • 数据源——信用评分的前世今生【附FICO分介绍】

    信用评分这把 看不见的标尺 如今已经逐渐渗透到我们生活的方方面面 大到贷款买房买车 小到租用一个共享充电宝 都受到它的影响 那么问题来了 这个重要的数字是从哪里冒出来的呢 这就要从信用评分的起源讲起 什么是信用评分 信用评分 Credit
  • Oracle 11g+PLSQL Developer安装及环境配置

    1 安装包 OracleXE112 Win64 zip 数据库服务管理平台 plsql 11 0 4 安装包 语言包 注册机 rar 第三方客户端 链接 https pan baidu com s 1AKTrd6Qu9 qk59N G6AV
  • cookie,token,ajax异步请求,知识点

    当get 或post 访问接口时 如果需要传入cookie 可以直接传入jar格式的cookie 也可以传入字典格式cookie cookie cookie是存储与访问者计算机的变量 由浏览器负责存储在电脑本地 一般加密存储 但是由于存储在
  • 软件审查工具

    代码审查工具 https baijiahao baidu com s id 1693720741656939513 wfr spider for pc Eclipse Code Review 代码审查 工具介绍 https www itey
  • 快速成长的秘诀|自我成长的方法有哪些?

    快速成长总共三篇 分别是 完成自我升级 自我成长的方法 学会自我培养或培养他人 在成长第一篇 完成自我升级 发布后 有很多同学做了仔细阅读 而且其中一位同学给了我非常好的反馈补充 他的原话 我看完了 给我一个最大的感受是 您把一整套认知思维
  • Vue动画的使用

    动画的作用 提高用户的体验 帮助用户更好的理解页面中的功能 使用过渡类名实现动画 动画进入 v enter 动画进入之前的初始状态 v enter to 动画进入之后的结束状态 v enter active 动画进入的时间段 PS 第一 第
  • KVM实战入门之Libvirt

    环境说明 本实验在VMware的centos6 7 x64进行的 1 VMware配置 如果不能勾上则不能继续进行 解决办法 重新创建VMware虚拟机 到这一步 自定义 能勾上了 创建虚拟机后即可下一步 2 查看Linux环境 查看是否支
  • HC32L110国产超低功耗华大MCU芯片介绍

    华大HC32L110 系列32 位 ARM Cortex M0 微控制器 HC32L110 系列是一款旨在延长便携式测量系统的电池使用寿命的超低功耗 Low Pin Count 宽电压工作范围的 MCU 集成 12 位 1M sps 高精度
  • VirtualBox+Windbg 进行双机调试的方法

    以前见他们调试驱动程序之类的都是使用的VMWare 我没怎么用这软件 感觉这软件有点臃肿 后台服务挂得太多了 感觉不爽 于是就没搞它 加上电脑上很早就装有Oracle的Virtual Box 于是就看了下 其实Virtual Box也有支持
  • 使用msf监听模块接收反弹shell

    Metasploit Framework MSF 提供了多种方式来监听反弹 shell 使用 multi handler 模块 这是 MSF 中最常用的模块之一 用于监听反弹 shell 它支持多个协议和 payload 可以根据需要进行配
  • SQL基础笔记

    Codecademy中Learn SQL SQL Table Transformaton和SQL Analyzing Business Metrics三门课程的笔记 以及补充的附加笔记 Codecademy的课程以SQLite编写 笔记中改
  • nginx反向代理后获取真实请求ip

    本来接口运行的好好的 后面为了规范接口 我在nginx加了如下代码 location v1 api proxy pass https xxx xxx xxx 8081 v1 api 后面重新部署后发现通过HttpServletRequest