Wie kann ich die aktuellen Verbindungen auf meinem Apache-Webserver anzeigen?


37

Ich hoste ziemlich viele virtuelle Hosts, die Apache in einer einfachen LAMP verwenden, die mit Hilfe von Webmin / Virtualmin eingerichtet wurde. Ich suche ein topartiges Tool, mit dem ich aktuelle Verbindungen überwachen kann. Der virtuelle Hosting-Teil scheint mir hier Probleme zu bereiten. Folgendes habe ich versucht:

  • netstat- Ich kann die Verbindungen sehen, aber sie zeigen mir, als ob sie alle meine primäre Domain verwenden, z mydomain.com:www.
  • iftop- Ich mag es sehr, aber ähnliche Nachteile wie netstat: zeigt den virtuellen Host nicht.
  • apachetop- scheint nicht für alle meine virtuellen Hosts Informationen anzuzeigen. Ich protokolliere in separaten benutzerdefinierten Protokolldateien. Ich vermute, dass dies die Ursache dafür ist, dass es nicht funktioniert.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- auch nicht arbeiten.

Ich suche also im Grunde nach etwas ähnlichem wie der aktuellen Ausgabe von netstat, aber um den virtuellen Host einzuschließen, für den die Anfrage bestimmt ist, z avirtualsite.com:www.


Ich verwende Apache2 - Standard-LAMP-Installation zur Verwendung mit VirtualMin / Webmin - Ich habe gerade gefunden apachetop- aber das überwacht nur die Datei, die ich zur Verfügung stelle .. verdammt - nicht alle Server ...
Piotr Kula

Antworten:


35

Andrea Corbellinis Antwort erklärt Ihnen, warum es mit den von Ihnen verwendeten Tools nicht funktioniert und wie Virtual Hosting funktioniert. Hier ist der einfachste Weg, den ich mir vorstellen kann, um es in Apache zu erledigen ...

mod_status wird dir helfen.

Haftungsausschluss: Ich kann nicht sagen, wie das in Webmin gemacht wird - ich verwende bloße Konfigurationsdateien, um Server einzurichten. Hier ist nur eine grundlegende Übersicht über die Schritte.

Es ist ein topähnliches Tool, wird jedoch als Webseite dargestellt. Es listet den aktuellen Status auf, der direkt von Apache abgefragt wird, so dass es nicht auf das Parsen von Protokolldateien ankommt, wie es der apachetopFall ist.

  1. Aktivieren mod_status:

    sudo a2enmod status
    
  2. Gewähren Sie sich Zugang.

    • Öffnen /etc/apache2/mods-enabled/status.confund bearbeiten Sie:
    • Setzen Sie ExtendedStatusauf On(optional, aber attraktiver und etwas langsamer)
    • Innerhalb der <Location /server-status>, hängen Sie Ihre IP - Adresse in die Zeile mit der AllowRichtlinie. Beispiel:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Starten Sie Apache neu:

    sudo service apache2 restart
    
  4. Genießen Sie das Tool in Ihrem Browser, zum Beispiel: http://1.2.3.4/server-status

    Es wird so aussehen wie in diesem Beispiel-Screenshot .

  5. Halten Sie gedrückt F5, um Updates zu erhalten. Oder holen Sie sich ein großartiges Browser-Plugin und sehen Sie zu, wie es aktualisiert wird!


Webmin

Nachtrag des OP für zukünftige Besucher

In Webmin finden Sie die grundlegenden Schritte zum Statusmodul hier:

  • Server -> Apache Webserver -> Apache-Module konfigurieren
  • Wählen Sie das Statusmodul aus und klicken Sie auf Ausgewählte Module aktivieren

Bildbeschreibung hier eingeben


Interessant - aber wenn ich 100 virtuelle Websites habe - zeigt es mir Statistiken für ALLE Websites? weil das coonection log in /var/log/apache2/access.log leer ist , weil wir seine eigene /log/access.log Ausbreitung nicht die Standard - Website, hat jede Webseite über
Piotr Kula

2
Ich mag dich jetzt sehr. Gib mir einen Kuss: * +1
Piotr Kula

Genie - Das habe ich gebraucht. es zeigt mir vhost jetzt! Vielen Dank, eine Million Mann! Ich weiß nicht, wie ich dein Wissen zurückzahlen soll!
Piotr Kula

Ernst! Ich liebe dieses Status-Tool so sehr! Ich habe so viele Skripte gefunden. Es hat mir geholfen, die Websites zu patchen, zu aktualisieren und zu reparieren. Ihre Hilfe ist so dankbar, ich wünschte, ich könnte Ihnen alle meine Vertreter geben!
Piotr Kula

@ppumkin Bitte nicht übertreiben. Es ist ein sehr einfaches und allgemeines Apache-Modul für diese Aufgaben. Jedes Buch über Apache, das sich selbst respektiert, erwähnt es. Ich bin froh, dass ich dabei hilfreich war.
Gertvdijk

15

Alle Werkzeuge, die Sie versuchen, geben Ihnen nie die richtige Antwort. Der Grund dafür ist, dass die von Ihnen angeforderten Informationen verloren gehen, wenn die Verbindung hergestellt wird.

Angenommen, Ihr Webserver verfügt über eine IP-Adresse ( 1.2.3.4 ) und zwei Hostnamen ( a.meinedomain.com und b.meinedomain.com ), die in diese IP-Adresse aufgelöst werden.

Was passiert, wenn Sie Ihren bevorzugten Webbrowser verwenden, wenn Sie a.mydomain.com besuchen ?

  1. Der Browser fragt Ihren DNS-Server, welcher IP-Adresse a.mydomain.com entspricht.
  2. Der DNS-Server teilt dem Browser mit, dass die Adresse 1.2.3.4 lautet .
  3. Der Webbrowser stellt eine Verbindung zu 1.2.3.4 her .

Also netstat& Co. nur wissen, dass es eine eingehende Verbindung zu 1.2.3.4 gibt . Der Grund, warum Sie einen Hostnamen anstelle einer IP-Adresse sehen, ist, dass die IP-Adresse einen rDNS-Eintrag enthält. Daher wird dieser anstelle der IP-Adresse angezeigt netstat, da er besser ist. Versuchen Sie es netstat -n(oder entfernen Sie den rDNS-Eintrag), und die IP-Adresse wird angezeigt.

Aber das ist noch nicht alles: Als ich sagte, dass die Informationen über den Hostnamen, mit dem die Verbindung hergestellt wurde, verloren gingen, stimmte ich nicht ganz. Aus Sicht des TCP / IP-Stacks ist dieser Satz wahr. Aber wenn wir die Dinge aus der Sicht des HTTP-Protokolls sehen, sind die Dinge anders. In jeder HTTP-Anfrage gibt es einen Host:Header, der den Hostnamen enthält, den der Browser für die Anfrage verwendet hat.

Kurz gesagt, sollten Sie sich die Protokolldateien Ihres Webservers ansehen. Der Webserver ist der Dienst, der die HTTP-Anforderungen verarbeitet, und daher der einzige Dienst, der den "ursprünglichen" Hostnamen kennt.


1
+1 Wichtige Hintergrundgeschichten zu Netzwerken werden unterschätzt. In meiner Antwort verlinkt, verdient dies auch Aufwertungen!
gertvdijk

13

Ein anderer Weg ist das Tippen

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

in Ihrem Terminal


2
Schön und einfach; ziemlich direkt, danke!
Julian F. Weinert

Ich stelle fest, dass in meinen cPanel-Installationen (auf CentOS-Computern, aber ich denke, dass cPanel unter Ubuntu wahrscheinlich dasselbe ist) access.lognicht alle Anforderungen enthalten sind. Stattdessen schaue ich /usr/local/apache/domlogs/nach Anfragen von virtualhost (aufgeteilt in SSL, Nicht-SSL und sogar FTP). Unter Ubuntu cPanel ist der Pfad möglicherweise anders.
Buttle Butkus

2
Ich habe das von Google gefunden. Diese Technik funktioniert in CentOS 7, außer Sie brauchen/var/log/httpd/access_log
mwfearnley

7

Sie können mit dieser Bash alle an Port 80 angeschlossenen IPS überprüfen

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

Hinweis: Wenn Sie einen anderen Port sehen möchten, ändern Sie 80

AUSGABE:

 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


1

Wenn Sie PID, Benutzer und Befehl möchten:

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

0

Sie können GoAccess auch interaktiv verwenden, um Ihre aktuellen Besucher anzuzeigen. Es analysiert zu diesem Zweck Ihr Apache-Zugriffsprotokoll und zeigt eine Reihe von Statistiken zu Ihrer Site an.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.