web-dev-qa-db-fra.com

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

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- Je l'aime beaucoup, mais le même inconvénient que netstatname__: ne montre pas l'hôte virtuel.
  • apachetop- semble ne pas afficher d'informations 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é.
  • ntopname__, darkstatname__, MRTGname__, bwm-ng, IPTraf- ne fonctionne pas non plus.

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

34
Piotr Kula

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.

Avertissement: 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 outil de type top-, mais représenté sous forme de 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 le fait apachetop.

  1. Activer mod_status:

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

    • Ouvrez /etc/Apache2/mods-enabled/status.conf et éditez:
    • Définissez ExtendedStatus sur On (facultatif, mais plus génial et un peu plus lent)
    • Dans le <Location /server-status>, ajoutez votre adresse IP à la ligne avec la directive Allow. 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 F5 pour obtenir des mises à jour. Ou obtenez un plugin de navigateur génial et regardez-le être mis à jour!


Webmin

addendum par 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 Status et cliquez sur Activer les modules sélectionnés

enter image description here

34
gertvdijk

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 résolvent à cette adresse IP.

Que se passe-t-il lorsque vous utilisez votre navigateur Web préféré lors de votre visite a.mydomain.com?

  1. Le navigateur demande à votre serveur DNS l'adresse IP a.mydomain.com correspond à.
  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.

Donc, netstat& co. Sachez seulement qu’une connexion entrante est établie avec 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, donc netstatpréfère le montrer à la place de l'IP, car il 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-tête Host: qui contient 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".

15
Andrea Corbellini

Une autre façon est de taper

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

dans votre terminal

13
niksmac

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

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

OUTPUT:

 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
7
DarckBlezzer

Vous pouvez vérifier cela avec:

netstat -na | grep 'ESTA'
2
user1717828

Si vous voulez pid, utilisateur et commande:

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

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.

0
umar14