如何查看Apache Web服务器上的当前连接?


37

我在Webmin / Virtualmin的帮助下在基本的LAMP中使用Apache托管了大量虚拟主机。我正在寻找一种可以监视当前连接的类似顶部的工具。虚拟主机部分似乎给我带来了麻烦。这是我尝试过的:

  • netstat-我可以看到这些连接,但是它们向我显示它们好像都在使用我的主域,例如mydomain.com:www
  • iftop-我非常喜欢,但是缺点是netstat:没有显示虚拟主机。
  • apachetop-似乎没有显示我所有虚拟主机的信息。我正在记录单独的自定义日志文件,我怀疑这是为什么它不起作用的原因。
  • ntopdarkstatMRTGbwm-ngIPTraf-不工作要么。

因此,基本上,我正在寻找与的当前输出类似的东西netstat,但要包括请求所针对的虚拟主机,例如:avirtualsite.com:www


我正在使用Apache2-与VirtualMin / Webmin一起使用的默认LAMP安装-我刚刚找到apachetop-但是它仅监视我提供的文件。该死的-并非所有服务器...
Piotr Kula

Answers:


35

Andrea Corbellini的答案向您解释了为什么它不能与您正在使用的工具一起使用以及虚拟主机如何工作。这是我可以想到的最简单的方法,可以在Apache中完成它...

mod_status 会帮你的忙。

免责声明:我无法确定如何在Webmin中完成此操作-我使用裸配置文件来设置服务器。这只是步骤的基本概述。

这是一个类似top的工具,但表示为网页。它列出了直接从Apache查询的当前状态,因此它不像解析日志文件那样依赖于解析日志文件apachetop

  1. 启用mod_status

    sudo a2enmod status
    
  2. 授予自己访问权限。

    • 打开/etc/apache2/mods-enabled/status.conf并编辑:
    • 设置ExtendedStatusOn(可选,但更加出色,但速度稍慢)
    • 在中<Location /server-status>您的IP地址添加到带有Allow指令的行中。例:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. 重新启动Apache:

    sudo service apache2 restart
    
  4. 在浏览器中使用该工具,例如: http://1.2.3.4/server-status

    看起来像这个示例屏幕截图

  5. 持续按F5以获取更新。或获得一个很棒的浏览器插件并观看它的更新!


Webmin

OP给未来访客的附录

在Webmin中,有关“状态”模块的基本步骤可以在这里找到:

  • 服务器 -> Apache Web服务器 -> 配置Apache模块
  • 选择状态模块,然后单击单击启用所选模块。

在此处输入图片说明


有趣-但是如果我有100个虚拟网站-它会显示所有网站的统计信息吗?因为/var/log/apache2/access.log中的连接日志为空,因为我们没有使用默认网站,所以每个网站都有自己的/log/access.log,分布于
Piotr Kula

2
我现在很喜欢你 给我一个吻:* +1
Piotr Kula 2013年

天才-那就是我所需要的。现在向我展示了虚拟主机!谢谢百万人!我不知道该如何偿还您的知识!
Piotr Kula 2013年

认真!我非常喜欢这个状态工具!由于这个原因,我检测到了很多脚本。它帮助我修补,升级和修复了网站。非常感谢您的帮助,我希望我能代表您!
Piotr Kula 2013年

@ppumkin请不要夸张。这是完成这些任务的非常基本且通用的Apache模块。任何有关Apache的自尊书籍都会提到它。我很高兴在这方面有所帮助。
gertvdijk

15

您尝试使用的所有工具永远不会给您正确的答案。原因是建立连接后,您所请求的信息会丢失。

让我们使用一个示例:假设您的Web服务器具有一个IP地址(1.2.3.4)和两个主机名(a.mydomain.comb.mydomain.com),它们可以解析为该IP地址。

当您访问a.mydomain.com时使用自己喜欢的Web浏览器会怎样

  1. 浏览器询问您的DNS服务器IP地址a.mydomain.com对应。
  2. DNS服务器告诉浏览器地址为1.2.3.4
  3. Web浏览器连接到1.2.3.4

所以netstat&co。只知道有一个到1.2.3.4的传入连接。之所以看到主机名而不是IP地址,是因为IP地址具有rDNS记录,因此netstat更喜欢显示该名称而不是IP,因为这样更好。尝试netstat -n(或删除rDNS记录),您将看到IP地址。

但这还不是全部:当我说用于建立连接的主机名信息丢失时,我并不完全正确。从TCP / IP堆栈的角度来看,这句话是正确的。但是,如果我们从HTTP协议的角度看待事物,那么事情就不一样了。在每个HTTP请求中,都有一个Host:标头,其中包含浏览器用来发出请求的主机名。

因此,简而言之,您应该查看Web服务器的日志文件。Web服务器是处理HTTP请求的服务,因此是唯一了解“原始”主机名的服务。


1
+1重要的网络背景故事被低估了。链接到我的答案中,这也值得赞扬!
gertvdijk 2013年

13

另一种方法是输入

tail -f /var/log/apache2/access.log

在您的终端


2
漂亮而简单;非常简单,谢谢!
朱利安·F·韦纳特

我注意到在我的cPanel安装中(在CentOS计算机上,但我认为Ubuntu上的cPanel可能是相同的),其中access.log不包含所有请求。相反,我查看了/usr/local/apache/domlogs/由虚拟主机发出的请求(在SSL,非SSL甚至FTP之间分割)。该路径在Ubuntu cPanel上可能不同。
Buttle Butkus

2
我是从Google找到的。此技术在CentOS 7中有效,除非您需要/var/log/httpd/access_log
-mwfearnley

7

您可以使用此bash检查连接在端口80上的所有ip

netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

注意:如果要查看其他端口,请更改80

输出:

 19 x.174.143.1
 13 x.175.135.1
  9 x.68.135.1
  8 x.144.87.1
  7 x.68.150.1
  6 x.92.4.1
  6 x.188.23.1
  5 x.190.164.1
  4 x.189.156.1

2

您可以使用以下方法进行检查:

netstat -na | grep 'ESTA'

1

如果要使用pid,用户和命令:

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9

0

您还可以交互式使用GoAccess查看当前访问者。为此,它将分析您的Apache访问日志,并显示有关您站点的大量统计信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.