解决使用了nginx获取IP地址都是127.0.0.1 的问题


Posted in Servers onSeptember 25, 2021

获取ip工具

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * IP地址
 *
 * @date 2020年3月6日 下午12:57:02
 */
@Slf4j
public class IPUtils {

    /**
     * 获取IP地址
     * 
     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = null;
        try {
            ip = request.getHeader("x-forwarded-for");
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
        } catch (Exception e) {
            log.error("IPUtils ERROR ", e);
        }
        
        //使用代理,则获取第一个IP地址
        if(StringUtils.isEmpty(ip) && ip.length() > 15) {
            if(ip.indexOf(",") > 0) {
                ip = ip.substring(0, ip.indexOf(","));
            }
        }
        
        return ip;
    }
    
}

如果你使用了nginx 则获取到的ip都会是127.0.0.1

在代理中加入如下配置proxy_set_header x-forwarded-for $remote_addr;

server {
        listen          80;
        server_name     api.qimen.pro;
        # 服务器文件上传大小限制
        client_max_body_size 10M;
        location / {
            proxy_pass   http://gymserver;
            proxy_set_header x-forwarded-for  $remote_addr;
        }
    }

到此这篇关于解决使用了nginx获取IP地址都是127.0.0.1 的问题的文章就介绍到这了,更多相关nginx获取IP地址问题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
Nginx中break与last的区别详析
Mar 31 Servers
nginx实现发布静态资源的方法
Mar 31 Servers
Nginx访问日志及错误日志参数说明
Mar 31 Servers
nginx proxy_cache 缓存配置详解
Mar 31 Servers
nginx服务器的下载安装与使用详解
Aug 02 Servers
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
Sep 25 Servers
Apache POI的基本使用详解
Nov 07 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
如何让你的Nginx支持分布式追踪详解
Jul 07 Servers
关于nginx 实现jira反向代理的问题
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 #Servers
nginx安装以及配置的详细过程记录
Sep 15 #Servers
Nginx缓存设置案例详解
Sep 15 #Servers
图文详解Nginx版本平滑升级方案
Sep 15 #Servers
Nginx配置文件详解以及优化建议指南
Sep 15 #Servers
学习nginx基础知识
You might like
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
javascript基本算法汇总
2016/03/09 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
python实现多线程的两种方式
2016/05/22 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
《太阳》教学反思
2014/02/21 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
党员争先创优承诺书
2015/01/20 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers