Site icon Soul & Shell Blog

如何在 Apache2 Log 記錄連線 Request Header?

apache

透過 mod_log_forensic 記錄 HTTP Request Header

最近解一個 Bug 用到了 Apache Header Log,順便記錄一下。這個精美的 Bug 在程式流程無法在腦袋中就發現問題,也剛好這個問題又是來自第三方的 HTTP 呼叫,也很難自己模擬複製問題。

一般碰到程式邏輯無法解決的問題,就會往底層找。直接調閱網路封包是一個好方法,HTTP Debug 之前常用 tcpdump 來關看封包內容,但是這一次剛好遇到 HTTPS 的環境,在沒有辦法建立 HTTP Proxy 的辦法下只好先由 Log 下手。

想法是觀測 HTTP Header 來模擬問題,由於 Apache 預設的 Access Log 沒有提供足夠的資訊,於是安裝了 mod_log_forensic Apache Module,安裝方法很簡單,如下:

a2enmod log_forensic

然後在要開啟 Log 的 VirtualHost 設定檔加入 ForensicLog,如下:

<VirtualHost *:443>

...

# 加上 ForensicLog
ForensicLog /var/log/apache2/forensic_log

...

</VirtualHost>

重新啟動 Apache2

service apache2 restart

等待連線進來以後就可以看到 Log 囉

tail -f /var/log/apache2/forensic_log

Header Log 如下,每一個「|」分割了 HTTP Header 中的每一行,可以忠實呈現原貌:

+18091:5d960d63:2|GET /css/font-awesome/all.min.css HTTP/1.1|Host:toright.com|Connection:keep-alive|Sec-Fetch-Mode:no-cors|User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36|Accept:text/css,*/*;q=0.1|Sec-Fetch-Site:same-origin|Referer:https%3a//toright.com/|Accept-Encoding:gzip, deflate, br|Accept-Language:zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,gl;q=0.5,tr;q=0.4|Cookie:point-sid=2c0g8k6t6ael9lkvivlohd8cu2; _ga=GA1.2.1342953514.1566138997; _fbp=fb.1.1566138997390.888811243|If-None-Match:"c80f-591395c596fab-gzip"|If-Modified-Since:Thu, 29 Aug 2019 03%3a47%3a12 GMT
-18091:5d960d63:2

最後 Bug 當然是解了囉,趕快記錄一下方法。下次見.......

Exit mobile version