tomcat程序記錄客戶端真實IP


需求:

開發告知:讓后端tomcat日志獲取真實的IP,而不是nginx 服務器的IP

tomcat前面是nginx做的反向代理,所以tomcat取到的是nginx的ip。

日志名稱是localhost_access_log.txt

 

其實解決這個問題,只需要修改兩個地方:

1.修改nginx的配置文件

在server或者location中添加

proxy_set_header X-Forwarded-For $remote_addr;

2.修改tomcat配置文件

修改server.xml文件,在該文件中

把className="org.apache.catalina.valves.AccessLogValve" directory="logs"塊中的pattern參數里的內容修改為上面的紅色字體內容,即:

pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i" resolveHosts="false"

修改完后的完整配置:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i" resolveHosts="false" />

 

pattern配置參數詳解:

 

pattern配置段,用於指定日志的輸出格式。日志參數如下:

%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) - 當前請求的線程名稱
此外,您可以指定以下別名來設置為普遍使用的模式之一:
common - %h %l %u %t "%r" %s %b
combined - %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" 

 

另外,還可以將request請求的查詢參數、session會話變量值、cookie值或HTTP請求/響應頭內容的變量值等內容寫入到日志文件。

它仿照了apache的語法:

%{XXX}i xxx代表傳入的頭(HTTP Request)

%{XXX}o xxx代表傳出的響應頭(Http Resonse)

%{XXX}c  xxx代表特定的Cookie名

%{XXX}r  xxx代表ServletRequest屬性名

%{XXX}s xxx代表HttpSession中的屬性名

 

pattern參數詳解參考:http://sofar.blog.51cto.com/353572/1712069/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM