Linux

如何在 Linux 上查看傳入的 HTTP 請求是否成功(查看響應)?

  • May 7, 2020

我對管理伺服器真的很陌生,我發現我可以執行 ngrep 並查看從 Google 到我們網站的連接(目前在搜尋控制台中出現成千上萬的 5xx 錯誤和“抓取異常”錯誤)。

我的問題是如何查看連接是否成功(如果Google實際上收到了 200 響應程式碼,或者沒有)。此外,是否**連接:關閉。**意味著連接已關閉並且他們沒有收到響應?

ngrep 的輸出範例。

$ sudo ngrep -il -d eth0 -W byline "Chrome/41.0.2272.96 Mobile Safari/537.36" port 80

GET / HTTP/1.1.
Host: subdomain.com.example.com.
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) X-Middleton/1.
Accept: text/html,application/xhtml+xml,application/signed-exchange;v=b3,application/xml;q=0.9,*/*;q=0.8.
Amp-Cache-Transform: google;v="1..3".
Cookie: BLAH.
From: googlebot(at)googlebot.com.
If-Modified-Since: Mon, 04 May 2020 15:51:07 GMT.
X-Forwarded-For: IP, IP.
X-Middleton: 1.
X-Middleton-Ip: IP.
X-Real-Ip: IP.
X-Snipe: BLAH.
Accept-Encoding: gzip.
Connection: close.

阿帕奇日誌

根據@hermanb 對您在該主題上提出的另一個問題的回复,最簡單的方法不是通過 tcpdump 或 ngrep,而是通過簡單地 grepping apache 日誌 - 它以更易於閱讀的形式記錄您想要的資訊,包括響應程式碼。

日誌文件的位置和佈局將根據您的設置而有所不同,並且非常可定制。預設日誌可能包含您想要的資訊,但如果沒有,您可以創建自己的日誌。

在我的伺服器上有線路

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined

在創建文件 /var/log/apache/other_vhosts_access.log 的配置文件中。前面的“CustomLog”位表示使用自定義日誌格式,末尾的 vhost_combined 位描述了日誌格式。

當然,您可以擁有超過 1 個日誌文件和超過 1 個日誌格式。這在https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#customlog中都有描述

一旦你有了一個格式,你就可以實時地 grep 日誌文件來查看你在尋找什麼——例如,

tail -f /var/log/apache2/other_vhosts_access.log | grep --line-buffered " 200

"

將查看日誌文件的每一行作為其創建並查找“200”。並使用“grep -v”來反轉搜尋。有很多更複雜的方法可以獲取資訊,使用更複雜的 grep 表達式和/或更多/其他日誌記錄進行購買。

您還應該閱讀上面連結的頁面,因為它有很多關於格式化您自己的日誌的資訊 - 例如,也許可以嘗試

LogFormat "%s %v:%p/%r" statuscodelog
CustomLog /path/to/mylogfile.log statuscodelog

從理論上講,它應該在 fom 中產生一個簡單的輸出

200 example.com/requested/path1 500 example.com/requested/file/causes/error

然後,您可以將其載入到電子表格中以便於分析,或者更具體、更簡單地通過類似的方式對其進行 grep

tail -f /path/to/mylogfile.log | grep –line-buffered “^5”

獲取返回狀態碼 5** 的 URL 列表當然,這可以定制以擷取任何你想要的東西,無論你決定創建什麼格式。這只是一個相當簡單的例子。

連接關閉

這是在響應消息中使用“連接:關閉”是什麼意思的副本?- 接受的答案表明“連接:關閉”是 Web 伺服器或客戶端發送的內容,以表明不應保持連接。該連結更深入,但它只是遵循 HTTP/1.1 連接規範,適用於不支持持久連接的應用程序。

引用自:https://serverfault.com/questions/1015957