NGINX反向代理,JAVA获取客户端IP

本文介绍如何配置NGINX反向代理以记录真实客户端IP,通过设置proxy_set_header来传递X-Forwarded-For和X-Real-IP头,后端Java代码解析这些头信息以获取原始IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生产上,配置NGINX的反向代理,为了统计IP访问记录,需要代理服务器知道来自用户的IP,这部分应该怎样实现。
第一步:NGINX的反向代理的配置

upstream MLSCHECK{
          server 10.3.51.XX:9802 weight=3 max_fails=3 fail_timeout=10s;
          server 10.3.XXX.XXX:9802 weight=3 max_fails=3 fail_timeout=10s;
          server 10.3.51.126:9802 weight=3 max_fails=3 fail_timeout=10s;

}

server {
        listen 80;
        server_name mlscheck.runchina.org.cn;

        location / {
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header REMOTE-HOST $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
             proxy_redirect      off;
             client_max_body_size 50m;
             client_body_buffer_size 256k;
             proxy_connect_timeout 30;
             proxy_send_timeout 30;
             proxy_read_timeout 60;
             proxy_buffer_size 256k;
             proxy_buffers 4 256k;
             proxy_busy_buffers_size 256k;
             proxy_temp_file_write_size 256k;
             proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
             proxy_max_temp_file_size 128m;
             proxy_pass http://MLSCHECK/;
        }
}

关键配置项

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Real-IP $remote_addr;

第二步:后端的java代码的写法

public String getClientIP(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.getRemoteAddr();   
    }   
    return ip;   
}   

这样就能获取来自客户端的真实的IP了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值