tomcat 获取真实ip地址

时间:2024-02-22 13:13:23

tomcat日志记录nginx的真实ip

 
1、在nginx.conf设置如下
http {
  set_real_ip_from 10.168.38.0/24;    #通过该指令指定信任的地址,将会被替代为精确的IP地址
  real_ip_header X-Forwarded-For;      #这个指令用于设置使用哪个头来替换IP地址。如果使用了X-Forwarded-For,那么该模块将会使用X-Forwarded-For头中的最后一个IP地址来替换前端代理的IP地址。
  }
location / {

  proxy_pass http://test/wdzj/;
  proxy_set_header Host $host:$server_port;
  proxy_set_header REMOTE-HOST $remote_addr;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #如果没有跳转机,这一段替换为proxy_set_header X-Real-IP $remote_addr;

  }
 
2、修改tomcat配置文件server.xml
<HOST>
 
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b %{Referer}i %{User-Agent}i" resolveHosts="false" />     #注意如果前端没有nginx跳转的话,将X-Forwarded-For替换成X-Real-IP
 
</HOST>
 
查看 tomcat log/localhost_access_log.txt内容如下
 
 
 
 
 

%a

这是记录访问者的IP,在日志里是127.0.0.1

%A

这是记录本地服务器的IP,在日志里是192.168.254.108

%b

这是发送信息的字节数,不涵括http头,如果字节数为0的话,显示为-

%B

看tomcat的解释,没看出来与b%的区别,但我这里显示为-1,没想明白,望知道者告知,我把官方解释贴出来吧 Bytes sent, excluding HTTP headers

%h

这个就是服务器名称了,如果resolveHosts为false的话,这里就是IP地址了,我的日志里是127.0.0.1

%H

访问者使用的协议,这里是HTTP/1.1

%l

这个也不太清楚,官方也说这个always return \'-\' 官方解释:Remote logical username from identd (可能这样翻译:记录浏览者进行身份验证时提供的名字)(always returns \'-\')

%m

访问的方式,是GET还是POST,我这是GET

%p

本地接收访问的端口,呵呵,我这里是80啦

%q

比如你访问的是aaa.jsp?bbb=ccc,那么这里就显示?bbb=ccc,明白了吧,这个q是querystring的意思

%r

官方解释:First line of the request (method and request URI),不是很明白

%s

这个是http的状态,我这里返回的是304,咱们经常看见访问某个网页报错误500什么的,那也会返回500

%S

用户的session ID,这个session ID大家可以另外查一下详细的解释,反正每次都会生成不同的session ID

%t

这就是时间啦,好像有一个Common Log Format可以改,不过我没找到

%u

得到了验证的访问者,否则就是"-"

%U

访问的URL地址,我这里是/rightmainima/leftbott4.swf

%v

服务器名称,可能就是你url里面写的那个吧,我这里是localhost

%D

官方解释:Time taken to process the request, in millis,应该是访问发生的时间,以毫秒记

%T

官方解释:Time taken to process the request, in seconds,应该是访问发生的时间,以秒记