如何在 Linux 上查看传入的 HTTP 请求是否成功(查看响应)?

如何在 Linux 上查看传入的 HTTP 请求是否成功(查看响应)?

我对服务器管理还很陌生,我发现我可以运行 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.

答案1

Apache 日志记录

根据 @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 位描述日志格式。

当然,您可以拥有多个日志文件和多个日志格式。这些内容均在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

从理论上讲,它应该产生一个简单的输出,格式如下

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 列表 当然,您可以根据自己的需要定制此列表,以您决定创建的任何格式捕获任何内容。这只是一个相当简单的例子。

连接关闭

这是在响应信息中使用“Connection: close”是什么意思?- 接受的答案表明“Connection: close”是 Web 服务器或客户端发送的,表示连接不应持久。链接更深入,但它只是遵循不支持持久连接的应用程序的 HTTP/1.1 连接规范。

相关内容