Как я могу посмотреть текущие соединения на моем веб-сервере Apache?

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

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

Итак, в основном я ищу что-то похожее на текущий вывод netstat, но для включения виртуального хоста, для которого предназначен запрос, например: avirtualsite.com:www.

37
задан 10 January 2013 в 23:04

7 ответов

Ответ Andrea Corbellini объясняет Вас, почему он не будет работать с инструментами, которые Вы используете и как Виртуальный Хостинг работает. Вот самый простой способ, которым я могу думать, чтобы сделать его в Apache...

mod_status выручит Вас.

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

Это - a 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

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

В Webmin основные шаги о модуле Состояния могут быть найдены здесь:

  • Серверы-> веб-сервер Apache-> Настраивают Модули Apache
  • Выберите модуль Состояния, и щелчок нажимают Enable Selected Modules

enter image description here

35
ответ дан 10 January 2013 в 23:04

Можно проверить, что весь дюйм/с соединился на порте 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
7
ответ дан 10 January 2013 в 23:04

Все инструменты, которые вы пробуете, никогда не дадут вам правильного ответа. Причина в том, что запрашиваемая вами информация теряется при установлении соединения.

Давайте рассмотрим пример: предположим, что ваш веб-сервер имеет один 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 & amp; сотрудничество. Знайте только, что есть входящее соединение с 1.2.3.4 . Причина, по которой вы видите имя хоста вместо IP-адреса, состоит в том, что IP-адрес имеет запись rDNS, поэтому netstat предпочитает показывать это вместо IP-адреса, потому что он лучше. Попробуйте netstat -n (или удалите запись rDNS), и вы увидите IP-адрес.

Но это еще не все: когда я сказал, что информация об имени хоста, которое использовалось для установления соединения, была потеряна, я был не совсем прав. С точки зрения стека TCP / IP это предложение верно. Но если мы увидим вещи с точки зрения протокола HTTP, все будет иначе. В каждом HTTP-запросе есть заголовок Host:, содержащий имя хоста, которое использовалось браузером для выполнения запроса.

Итак, вкратце, вы должны посмотреть файлы журналов вашего веб-сервера. Веб-сервер - это служба, которая обрабатывает запросы HTTP, и, следовательно, единственная служба, которая знает об «исходном» имени хоста.

0
ответ дан 10 January 2013 в 23:04

Если вам нужен pid, пользователь и команда:

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9
0
ответ дан 10 January 2013 в 23:04

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

netstat -na | grep 'ESTA'
0
ответ дан 10 January 2013 в 23:04

Другой способ - набрать

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

в своем терминале

.
0
ответ дан 10 January 2013 в 23:04

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

0
ответ дан 10 January 2013 в 23:04

Другие вопросы по тегам:

Похожие вопросы: