Я размещаю довольно много виртуальных хостов, используя Apache в базовой LAMP, настроенной с помощью Webmin / Virtualmin. Я ищу топ-инструмент, в котором я могу отслеживать текущие соединения. Часть виртуального хостинга, кажется, доставляет мне неприятности. Вот что я попробовал:
netstat
- я вижу соединения, но они показывают мне, как будто они все используют мой основной домен, например, mydomain.com:www
. iftop
- мне это очень нравится, но недостаток похож на netstat
: не показывает виртуальный хост. apachetop
- кажется, показывает не информацию для всех моих виртуальных хостов. Я веду журнал для отдельных пользовательских файлов журналов, что, как я подозреваю, является причиной, почему это не работает. ntop
, darkstat
, MRTG
, bwm-ng
, IPTraf
- тоже не работает. Итак, в основном я ищу что-то похожее на текущий вывод netstat
, но для включения виртуального хоста, для которого предназначен запрос, например: avirtualsite.com:www
.
Ответ Andrea Corbellini объясняет Вас, почему он не будет работать с инструментами, которые Вы используете и как Виртуальный Хостинг работает. Вот самый простой способ, которым я могу думать, чтобы сделать его в Apache...
mod_status
выручит Вас.Отказ от ответственности: Я не могу сказать, как это сделано в Webmin - я использую пустые конфигурационные файлы для установки серверов. Вот просто основной обзор шагов.
Это - a top
- как инструмент, но представленный как веб-страница. Это перечисляет текущее состояние, непосредственно запрошенное от Apache, таким образом, это не в зависимости от парсинга файлов журнала как apachetop
делает.
Включить mod_status
:
sudo a2enmod status
Предоставьте себе доступ.
/etc/apache2/mods-enabled/status.conf
и редактирование:ExtendedStatus
кому: On
(дополнительный, но больше великолепия и немного медленнее)В <Location /server-status>
, добавьте свой IP-адрес к строке с Allow
директива. Пример:
Allow from 127.0.0.1 ::1 66.77.88.99
Apache перезапуска:
sudo service apache2 restart
Наслаждайтесь инструментом в своем браузере, например: http://1.2.3.4/server-status
Это будет похоже на этот снимок экрана в качестве примера.
Продолжайте нажатие F5 для получения обновлений. Или получите потрясающий плагин браузера и наблюдайте то, чтобы он был обновленным!
приложение OP для будущих посетителей
В Webmin основные шаги о модуле Состояния могут быть найдены здесь:
Можно проверить, что весь дюйм/с соединился на порте 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
Все инструменты, которые вы пробуете, никогда не дадут вам правильного ответа. Причина в том, что запрашиваемая вами информация теряется при установлении соединения.
Давайте рассмотрим пример: предположим, что ваш веб-сервер имеет один IP-адрес ( 1.2.3.4 ) и два имени хоста ( a.mydomain.com и b.mydomain .com ), которые разрешают этот IP-адрес.
Что происходит при использовании вашего любимого веб-браузера при посещении a.mydomain.com ?
Так netstat
& amp; сотрудничество. Знайте только, что есть входящее соединение с 1.2.3.4 . Причина, по которой вы видите имя хоста вместо IP-адреса, состоит в том, что IP-адрес имеет запись rDNS, поэтому netstat
предпочитает показывать это вместо IP-адреса, потому что он лучше. Попробуйте netstat -n
(или удалите запись rDNS), и вы увидите IP-адрес.
Но это еще не все: когда я сказал, что информация об имени хоста, которое использовалось для установления соединения, была потеряна, я был не совсем прав. С точки зрения стека TCP / IP это предложение верно. Но если мы увидим вещи с точки зрения протокола HTTP, все будет иначе. В каждом HTTP-запросе есть заголовок Host:
, содержащий имя хоста, которое использовалось браузером для выполнения запроса.
Итак, вкратце, вы должны посмотреть файлы журналов вашего веб-сервера. Веб-сервер - это служба, которая обрабатывает запросы HTTP, и, следовательно, единственная служба, которая знает об «исходном» имени хоста.
Если вам нужен pid, пользователь и команда:
lsof -i tcp:443,80 | egrep 'PID|->' | sort -k9
Вы можете проверить это с помощью:
netstat -na | grep 'ESTA'
Другой способ - набрать
tail -f /var/log/apache2/access.log
в своем терминале
.Вы также можете использовать GoAccess в интерактивном режиме для просмотра ваших текущих посетителей. Для этого он анализирует ваш журнал доступа Apache и показывает статистику вашего сайта.