Як я можу дивитись поточні з'єднання на своєму веб-сервері Apache?


37

Я розміщую досить багато віртуальних хостів, що використовують Apache в базовому LAMP, створеному за допомогою Webmin / Virtualmin. Я шукаю найпопулярніший інструмент, за допомогою якого я можу контролювати поточні з'єднання. Віртуальна хостингова частина, здається, створює мені проблеми. Ось що я спробував:

  • netstat- Я бачу з'єднання, але вони показують мені, ніби всі вони використовують мій основний домен, наприклад mydomain.com:www.
  • iftop- Мені це дуже подобається, але такий же недолік, як netstat: не показує віртуальний хост.
  • apachetop- здається, показує не інформацію для всіх моїх віртуальних хостів. Я реєструюсь, щоб розділити власні файли журналів, що, як я підозрюю, є причиною того, що це не працює.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- не працює , або.

Так, в принципі, я шукаю що - щось подібне токовому виходу netstat, але включити віртуальний хост запит для, наприклад: avirtualsite.com:www.


Я використовую Apache2 - встановлення LAMP за замовчуванням для використання з VirtualMin / Webmin - я щойно знайшов apachetop- але це лише монітор файлу, який я надаю .. damnit- не всі сервери ...
Piotr Kula

Відповіді:


35

Відповідь Андреа Корбелліні пояснює, чому це не працюватиме з інструментами, якими ви користуєтесь, і як працює Віртуальний хостинг. Ось найпростіший спосіб, який я можу придумати, щоб зробити це в Apache ...

mod_status допоможе вам.

Відмова: Я не можу сказати, як це робиться в Webmin - я використовую голі файли конфігурації для налаштування серверів. Ось лише основний огляд кроків.

Це topподібний інструмент, але представлений у вигляді веб-сторінки. У ньому перераховано поточний стан, прямо запитуваний від Apache, тому це не залежить від аналізу файлів журналів, як apachetopце робиться.

  1. Увімкнути mod_status:

    sudo a2enmod status
    
  2. Надайте собі доступ.

    • Відкрийте /etc/apache2/mods-enabled/status.confта відредагуйте:
    • Встановіть ExtendedStatusв On( НЕ обов'язково, але більш обладнаний і трохи повільніше)
    • Всередині <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 основні кроки щодо модуля стану можна знайти тут:

  • Сервери -> Веб-сервер Apache -> Налаштування модулів Apache
  • Виберіть модуль статусу та натисніть кнопку Увімкнути вибрані модулі

введіть тут опис зображення


Цікаво - але якщо у мене є 100 віртуальних веб-сайтів - покажуть мені статистику для ВСІХ веб-сайтів? оскільки журнал coonection в /var/log/apache2/access.log порожній, тому що ми не використовуємо веб-сайт за замовчуванням, кожен веб-сайт має власний /log/access.log, розповсюджений
Piotr Kula

2
Зараз ти мені дуже подобається. Дай поцілунок: * +1
Пьотр Кула

Геній - Це те, що мені було потрібно. це показує мені vhost зараз! Дякую мільйона чоловік! Я не знаю, як погасити свої знання!
Пьотр Кула

Серйозно! Я дуже люблю цей інструмент статусу ... Завдяки цьому я виявив стільки сценаріїв. Це допомогло мені зробити сайти виправленими, оновленими та налаштованими. Ваша допомога дуже цінується, я б хотів, щоб я міг дати вам усі свої репрезенти!
Пьотр Кула

@ppumkin Не перебільшуйте, будь ласка. Це дуже базовий і поширений модуль Apache для цих завдань. Будь-яка поважаюча себе книга про Apache згадає про це. Я радий, що мені в цьому допомогли.
gertvdijk

15

Усі інструменти, які ви намагаєтеся, ніколи не дадуть вам правильної відповіді. Причина полягає в тому, що інформація, яку ви запитуєте, втрачається під час встановлення з'єднання.

Давайте скористаємося прикладом: припустимо, ваш веб-сервер має одну IP-адресу ( 1.2.3.4 ) та два імена хостів ( a.mydomain.com та b.mydomain.com ), які відповідають цій IP-адресі.

Що відбувається, коли ви користуєтесь улюбленим веб-браузером, коли відвідуєте a.mydomain.com ?

  1. Браузер запитує у вашого DNS-сервера IP-адресу a.mydomain.com відповідає.
  2. DNS-сервер повідомляє веб-переглядачу адресу 1.2.3.4 .
  3. Веб-браузер підключається до 1.2.3.4 .

Так netstat& co. знайте лише, що існує вхідне з'єднання з 1.2.3.4 . Причина, чому ви бачите ім'я хоста замість IP-адреси, полягає в тому, що IP-адреса має запис rDNS, тому netstatвважає за краще, щоб це було замість IP-адреси, оскільки це приємніше. Спробуйте netstat -n(або видаліть запис rDNS), і ви побачите IP-адресу.

Але це ще не все: коли я сказав, що інформація про ім'я хоста, що використовується для з'єднання, втрачена, я не був абсолютно прав. З точки зору стеку TCP / IP, це речення є істинним. Але якщо ми бачимо речі з точки зору протоколу HTTP, то справи відрізняються. У кожному HTTP-запиті є Host:заголовок, який містить ім'я хоста, яке використовувався браузером для здійснення запиту.

Отже, коротше, вам слід переглянути файли журналів вашого веб-сервера. Веб-сервер - це послуга, яка обробляє HTTP-запити і тому єдина послуга, яка знає про "оригінальне" ім'я хоста.


1
+1 Важливі фонові історії для мережі. Пов'язане з моєю відповіддю, це також заслуговує на надбавку!
gertvdijk

13

Інший спосіб - це набрати

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

у своєму терміналі


2
Приємно і просто; досить прямо вперед, дякую!
Julian F. Weinert

Я помічаю, що в моїх установках cPanel (на машинах CentOS, але я думаю, що cPanel на Ubuntu, мабуть, однаковий), access.logвін не містить усіх запитів. Натомість я заглядаю, /usr/local/apache/domlogs/щоб побачити запити від virtualhost (розділений між SSL, non-SSL і навіть FTP). Шлях може бути різним у Ubuntu cPanel.
Buttle Butkus

2
Я знайшов це в Google. Ця методика працює у CentOS 7, крім того, що вам потрібно/var/log/httpd/access_log
mwfearnley

7

Ви можете перевірити всі ips, підключені до порту 80, за допомогою цього bash

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


1

Якщо вам потрібно pid, користувач та команду:

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

0

Ви також можете використовувати GoAccess інтерактивно для перегляду своїх поточних відвідувачів. З цією метою він аналізує ваш журнал доступу Apache і показує купу статистичних даних про ваш сайт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.