Tomcat日志輸出來源的真實IP和域名
敘述:Nginx的反向代理實際上是客戶端和真實的應用服務器之間的一個橋梁,客戶端(一般是瀏覽器)訪問Nginx服務器,Nginx再去訪問Web應用服務器。對於Web應用來說,這次HTTP請求的客戶端是Nginx而非真實的客戶端瀏覽器,如果不做特殊處理的話,Web應用會把Nginx當作請求的客戶端,獲取到的客戶端信息就是Nginx的一些信息。
要在Tomcat記錄到真實的IP和瀏覽器訪問的域名
1、添加頭部
在location上增加如下內容:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
2、Tomcat修改server.xml文件
在Host元素最下面找到className
添加上圖紅框內的字段格式內容即可。
訪問瀏覽器后查看日志,已經生效
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) - 當前請求的線程名稱
另外,還可以將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中的屬性名