前端nginx時,讓後端tomcat記錄真實IP

對於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中的屬性名

相關文章
相關標籤/搜索