對於nginx+tomcat這種架構,若是後端tomcat配置保持默認,那麼tomcat的訪問日誌裏,記錄的就是前端nginx的IP地址,而不是真實的訪問IP。所以,須要對nginx、tomcat作以下配置:
前端
1)nginx配置python
......nginx
proxy_set_header Host $host;web
proxy_set_header X-Real-IP $remote_addr;apache
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;json
......後端
2)tomcat配置api
......tomcat
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs/tomcat"服務器
prefix="search_access" suffix=".log"
pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %{User-Agent}i" resolveHosts="false"/>
......
3)日誌效果
10.0.11.162 - - [12/Nov/2015:11:22:11 +0800] GET /elesearch-search-api/search/restaurant.json?start=0&end=1&lbs=POINT%28120.285468902%2031.5033700783%29&rt=id&tq=id:328864 HTTP/1.0 200 102 2 python-requests/2.4.3 CPython/2.7.5 Linux/3.10.0-229.11.1.el7.x86_64
10.0.50.54 - - [12/Nov/2015:11:22:11 +0800] GET /elesearch-search-api/search/restaurantv5home.json?rt=id%2Cdelivery_price&lbs=POINT%28120.387601+36.273438%29&end=500&uid=22454922&start=0&from=webapi HTTP/1.0 200 6404 11 python-requests/2.7.0 CPython/2.7.5 Linux/3.10.0-229.el7.x86_64
10.0.40.91 - - [12/Nov/2015:11:22:11 +0800] GET /elesearch-search-api/search/restaurant.json?start=0&end=1&lbs=POINT%28116.316306833%2039.9776800442%29&rt=id&tq=id:376608 HTTP/1.0 200 119 3 python-requests/2.4.3 CPython/2.7.5 Linux/3.10.0-229.11.1.el7.x86_64
如今咱們主要來看一下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中的屬性名