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 "%r" %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) - 当前请求的线程名称