Как я могу посмотреть текущие соединения на моем веб-сервере 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- но он только контролирует файл, который я предоставляю .. черт не все серверы ...
Петр Кула

Ответы:

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

приложение от ОП для будущих посетителей

В Webmin основные шаги по модулю статуса можно найти здесь:

  • Серверы -> Apache Webserver -> Настройка модулей Apache
  • Выберите модуль « Состояние » и нажмите « Включить выбранные модули».

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

gertvdijk
источник
интересно, но если у меня будет 100 виртуальных сайтов - будет ли мне показана статистика для ВСЕХ сайтов? поскольку журнал объединения в /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и Ко. Знайте только, что есть входящее соединение с 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

в вашем терминале

niksmac
источник
2
Красиво и просто; довольно прямо, спасибо!
Джулиан Ф. Вейнерт,
Я заметил, что в моих установках cPanel (на машинах CentOS, но я думаю, что cPanel в Ubuntu, вероятно, то же самое), access.logон не содержит все запросы. Вместо этого я смотрю, /usr/local/apache/domlogs/чтобы увидеть запросы по виртуальному хосту (разделенные на SSL, не-SSL и даже FTP). Путь может быть другим в Ubuntu cPanel.
Баттл Буткус
2
Я нашел это из Google. Эта техника работает в CentOS 7, за исключением того, что вам нужно/var/log/httpd/access_log
mwfearnley
7

С помощью этого bash вы можете проверить все ips, подключенные к порту 80

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
DarckBlezzer
источник
2

Вы можете проверить это с:

netstat -na | grep 'ESTA'
user1717828
источник
1

Если вы хотите pid, user и command:

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9
Vextor
источник
0

Вы также можете использовать GoAccess в интерактивном режиме для просмотра ваших текущих посетителей. Для этого он анализирует ваш журнал доступа Apache и показывает статистику вашего сайта.

umar14
источник