nginx代理web服务后如何获取客户端的真实ip

4 篇文章 0 订阅

nginx代理web服务后如何获取客户端的真实ip

问题描述

如果用户直接访问web服务,可以通过如下方式获取到客户端ip:

String clientIp1 = request.getRemoteAddr();

如果使用nginx代理web服务,通过上述方式获取到的IP地址为nginx的地址。
在这里插入图片描述

解决办法

nginx配置修改

在nginx中添加如下配置:

proxy_set_header  X-Real-IP        $remote_addr;

jsp代码修改

在jsp中使用以下方式,即可获取到客户端的实际ip:

String clientIp2 = request.getHeader("X-Real-IP");

修改后,可以通过nginx获取到客户端的真实ip:
在这里插入图片描述

完整代码

nginx配置

# test-nginx-config

upstream ip_server {
       ip_hash;
       server 127.0.0.1:8080;
}


server {
	listen       9001;
    #listen       localhost:8080;
    #server_name  somename  alias  another.alias;

	location /ip/{
		proxy_pass http://ip_server;
		
		#Proxy Settings
		proxy_redirect    off;
		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_connect_timeout       60;
		proxy_read_timeout          60;
		proxy_send_timeout          60;
	}
}

jsp代码

<%@ page language="java" pageEncoding="utf-8"%>
 
<html>
  <head><title>test ip</title></head>
  <body>
    <h1><font color="blue">Client Info</h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("my.name","zhangSan"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
      	<td>Server IP</td>
      	<%
		String path = request.getContextPath();
		String basePath = request.getScheme()+"://"+request.getLocalAddr() +":"+request.getLocalPort()+path+"/";
		String clientIp1 = request.getRemoteAddr();
		String clientIp2 = request.getHeader("X-Real-IP");
		%>
		<td><%=basePath%></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
      <tr>
        <td>Ip from Web</td>
        <td><%= clientIp1 %></td>
     </tr>
      <tr>
        <td>Ip from Nginx</td>
        <td><%= clientIp2 %></td>
     </tr>
  
    </table>
  </body>
</html>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值