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

Pio*_*ula 40 websites virtualhost apache2 webmin

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

  • netstat- 我可以看到连接,但它们显示我好像它们都在使用我的主域,例如mydomain.com:www.
  • iftop- 我很喜欢它,但类似的缺点是netstat:不显示虚拟主机。
  • apachetop- 似乎没有显示我所有虚拟主机的信息。我正在登录到单独的自定义日志文件,我怀疑这是它不起作用的原因。
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- 也不起作用。

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

ger*_*ijk 36

Andrea Corbellini 的回答向您解释了为什么它不适用于您正在使用的工具以及虚拟主机的工作原理。这是我能想到的在 Apache 中完成它的最简单方法......

mod_status 会帮助你。

免责声明:我不知道这是如何在 Webmin 中完成的 - 我使用裸配置文件来设置服务器。这里只是对这些步骤的基本概述。

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

  1. 启用mod_status

    sudo a2enmod status
    
    Run Code Online (Sandbox Code Playgroud)
  2. 授予自己访问权限。

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

      Allow from 127.0.0.1 ::1 66.77.88.99
      
      Run Code Online (Sandbox Code Playgroud)
  3. 重启阿帕奇:

    sudo service apache2 restart
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在浏览器中享受该工具,例如: http://1.2.3.4/server-status

    它看起来像这个示例截图

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


网络管理员

OP 为未来访问者提供的附录

在 Webmin 中,可以在此处找到有关 Status 模块的基本步骤:

  • 服务器-> Apache Webserver ->配置 Apache 模块
  • 选择状态模块,然后单击单击启用选定的模块

在此处输入图片说明

  • 我现在非常喜欢你。给我一个吻:* +1 (2认同)

And*_*ini 15

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

让我们举一个例子:假设您的 Web 服务器有一个 IP 地址 ( 1.2.3.4 ) 和两个解析为该 IP 地址的主机名(a.mydomain.comb.mydomain.com)。

当您访问a.mydomain.com时使用您最喜欢的网络浏览器会发生什么?

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

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

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

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


小智 14

另一种方法是键入

tail -f /var/log/apache2/access.log
Run Code Online (Sandbox Code Playgroud)

在你的终端

  • 漂亮而简单;非常直接,谢谢! (2认同)
  • 我从谷歌找到了这个。此技术适用于 CentOS 7,除非您需要 `/var/log/httpd/access_log` (2认同)

Dar*_*zer 10

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

netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
Run Code Online (Sandbox Code Playgroud)

注意:如果要查看其他端口,请更改 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
Run Code Online (Sandbox Code Playgroud)

  • 第一列中的这些值是什么?这些是来自单个 IP 地址的连接实例的数量吗? (2认同)