Comment puis-je regarder les connexions actuelles sur mon serveur Web Apache?


37

J'héberge beaucoup d'hôtes virtuels utilisant Apache dans une LAMP de base configurée à l'aide de Webmin / Virtualmin. Je recherche un outil de haut niveau dans lequel je peux surveiller les connexions actuelles. La partie hébergement virtuel semble me causer des problèmes ici. Voici ce que j'ai essayé:

  • netstat- Je peux voir les connexions, mais elles me montrent comme si elles utilisaient toutes mon domaine principal, par exemple mydomain.com:www.
  • iftop- J'aime beaucoup, mais les inconvénients sont les mêmes que netstat: ne montre pas l'hôte virtuel.
  • apachetop- semble ne montrer aucune information pour tous mes hôtes virtuels. Je me connecte pour séparer les fichiers journaux personnalisés, ce qui, je suppose, est la cause de son inefficacité.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- ne fonctionne pas non plus .

Donc, en gros, je cherche quelque chose de similaire à la sortie de courant netstat, mais d'inclure l'hôte virtuel la demande est pour, par exemple: avirtualsite.com:www.


J'utilise Apache2 - Installation par défaut LAMP à utiliser avec Virtualmin / Webmin - Je viens de découvrir apachetop- mais qui ne contrôle que le fichier i fournir .. damnit- pas tous les serveurs ...
Piotr Kula

Réponses:


35

La réponse d'Andrea Corbellini vous explique pourquoi cela ne fonctionne pas avec les outils que vous utilisez et comment fonctionne l'hébergement virtuel. Voici le moyen le plus simple auquel je puisse penser pour le faire dans Apache ...

mod_status va vous aider.

Clause de non-responsabilité: je ne sais pas comment cela se passe dans Webmin - J'utilise des fichiers de configuration nus pour configurer des serveurs. Voici juste un aperçu de base des étapes.

C'est un topoutil similaire, mais représenté comme une page Web. Il répertorie l'état actuel directement interrogé par Apache. Il ne dépend donc pas de l'analyse des fichiers journaux, comme c'est le apachetopcas pour.

  1. Activer mod_status:

    sudo a2enmod status
    
  2. Accordez-vous l'accès.

    • Ouvrir /etc/apache2/mods-enabled/status.confet éditer:
    • Réglé ExtendedStatussur On(facultatif, mais plus génial et un peu plus lent)
    • Dans le <Location /server-status>, ajoutez votre adresse IP à la ligne avec la Allowdirective. Exemple:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Redémarrez Apache:

    sudo service apache2 restart
    
  4. Profitez de l'outil dans votre navigateur, par exemple: http://1.2.3.4/server-status

    Cela ressemblera à cet exemple de capture d'écran .

  5. Continuez à appuyer F5pour obtenir des mises à jour. Ou obtenez un plugin de navigateur génial et regardez-le être mis à jour!


Webmin

addendum de l'OP pour les futurs visiteurs

Dans Webmin, les étapes de base concernant le module Status peuvent être trouvées ici:

  • Serveurs -> Serveur Web Apache -> Configurer les modules Apache
  • Sélectionnez le module État et cliquez sur Activer les modules sélectionnés.

entrez la description de l'image ici


intéressant, mais si j'ai 100 sites Web virtuels, est-ce que les statistiques de TOUS les sites seront affichées? parce que le journal de coonection dans /var/log/apache2/access.log est vide parce que nous ne pas utiliser le site par défaut, chaque site a sa propre diffusion de /log/access.log à travers
Piotr Kula

2
Je vous aime beaucoup maintenant. Emporte-moi un baiser: * +1
Piotr Kula

Génie - C'est ce dont j'avais besoin. il me montre vhost maintenant! Merci un million d'hommes! Je ne sais pas comment rembourser vos connaissances!
Piotr Kula

Sérieusement! J'aime tellement cet outil de statut! J'ai détecté tellement de scripts grâce à cela. Cela m'a aidé à corriger, à améliorer et à réparer les sites. Votre aide est tellement appréciée que j'aimerais pouvoir vous donner toute ma réputation!
Piotr Kula

@ppumkin N'exagère pas s'il te plaît. C'est un module Apache très basique et courant pour ces tâches. Tout livre qui se respecte sur Apache le mentionnera. Je suis content d'avoir été utile à cet égard, cependant.
gertvdijk

15

Tous les outils que vous essayez ne vous donneront jamais la bonne réponse. La raison en est que les informations que vous demandez sont perdues lorsque la connexion est établie.

Prenons un exemple: supposons que votre serveur Web ait une adresse IP ( 1.2.3.4 ) et deux noms d’hôte ( a.mydomain.com et b.mydomain.com ) qui correspondent à cette adresse IP.

Que se passe-t-il lorsque vous utilisez votre navigateur Web préféré lorsque vous visitez le site a.mydomain.com ?

  1. Le navigateur demande à votre serveur DNS l'adresse IP correspondant à a.mydomain.com .
  2. Le serveur DNS indique au navigateur que l'adresse est 1.2.3.4 .
  3. Le navigateur Web se connecte à 1.2.3.4 .

So netstat& co. sachez seulement qu'une connexion entrante est établie à 1.2.3.4 . La raison pour laquelle vous voyez un nom d’hôte au lieu d’une adresse IP est que l’adresse IP a un enregistrement rDNS, elle netstatpréfère donc l’indiquer au lieu de l’IP, car c’est plus agréable. Essayez netstat -n(ou supprimez l'enregistrement rDNS) et vous verrez l'adresse IP.

Mais ce n'est pas tout: quand j'ai dit que les informations sur le nom d'hôte utilisé pour établir la connexion avaient été perdues, je n'avais pas entièrement raison. Du point de vue de la pile TCP / IP, cette phrase est vraie. Mais si nous voyons les choses du point de vue du protocole HTTP, les choses sont différentes. Dans chaque demande HTTP, il existe un en- Host:tête contenant le nom d'hôte utilisé par le navigateur pour effectuer la demande.

Donc, en bref, vous devriez regarder les fichiers de log de votre serveur web. Le serveur Web est le service qui gère les demandes HTTP et, par conséquent, le seul service qui connaît le nom d'hôte "d'origine".


1
+1 Les histoires importantes de réseautage sont sous-estimées. Lié dans ma réponse, cela mérite également des votes positifs!
gertvdijk

13

Une autre façon est de taper

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

dans votre terminal


2
Gentil et simple; assez simple, merci!
Julian F. Weinert

Je remarque que dans mes installations cPanel (sur des machines CentOS, mais je pense que cPanel sur Ubuntu est probablement identique), le access.logne contient pas toutes les demandes. Au lieu de cela, je regarde /usr/local/apache/domlogs/pour voir les demandes de virtualhost (réparties entre SSL, non-SSL et même FTP). Le chemin peut être différent sur Ubuntu cPanel.
Buttle Butkus

2
J'ai trouvé cela de Google. Cette technique fonctionne dans CentOS 7, sauf ce dont vous avez besoin/var/log/httpd/access_log
mwfearnley

7

Vous pouvez vérifier tous les ips connectés sur le port 80 avec cette bash

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

Remarque: si vous voulez voir un autre port, changez 80

SORTIE:

 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

Si vous voulez pid, utilisateur et commande:

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

0

Vous pouvez également utiliser GoAccess de manière interactive pour afficher vos visiteurs actuels. Il analyse votre journal d’accès Apache à cet effet et affiche un ensemble de statistiques sur votre site.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.