需求:
開發告知:讓后端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/
