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,应该是访问发生的时间,以秒记 |