Nginx反向代理Tomcat获取真实IP

1、nginx.conf配置

修改 Server location配置

增加

proxy_set_header X-Real-IP $remote_addr;        #保留代理之前的真实客户端ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #记录代理过程

server {
    listen       80;
    proxy_next_upstream off;
    server_name  xx.xx.xx;
    access_log  /var/log/nginx/xx.xx.xx.access.log  main;
    location / {
        proxy_pass http://172.16.3.225:8080;
        proxy_read_timeout 300;
        proxy_send_timeout 300;
        proxy_redirect          off;
        proxy_set_header   Host             $host:$server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        client_max_body_size    1000m;
        add_header Access-Control-Max-Age 86400;
    }
}

2、修改Tomcat conf目录下的server.xml配置

增加 Valve className=“org.apache.catalina.valves.RemoteIpValve” 配置
修改 Valve className=“org.apache.catalina.valves.AccessLogValve” pattern中的配置%h —>%{X-Real-IP}i 即可

		<!--
		<Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="x-forwarded-for"
           remoteIpProxiesHeader="x-forwarded-by" /> -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%{X-Real-IP}i %l %u %t %{Host}i &quot;%r&quot; %s %b %D" />

通过以上两步的设置,我们在tomcat的日志文件 localhost_access_log.2021-11-25 可以看到记录了真实的ip地址,而非原先的nginx服务的ip。

 %{X-Real-IP}i:获取客户真实ip
 %l:从identd返回的远端逻辑用户名,总是返回’-’
 %u:认证以后的远端用户(如果存在的话,否则为’-’)
 %t:日志和时间,使用通常的log格式
 %{Host}i:获取客户请求的host
 %s:响应的状态码
 %b:发送的字节数,不包含HTTP头,如果为0,使用”-”
 %D:处理请求的时间,以毫秒为单位

%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名
%H - 请求协议
%l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
%m - 请求方法
%p - 本地端口
%q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
%r - 第一行的要求
%s - 响应的HTTP状态代码
%S - 用户会话ID
%t - 日期和时间,在通用日志格式
%u - 远程用户身份验证
%U - 请求的URL路径
%v - 本地服务器名
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
%I (大写的i) - 当前请求的线程名称
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

运维生涯记录

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值