Проверка соединений с вебсервером apache

Проверка соединений с вебсервером  apache

 

Для просмотра сетевых соединений в FreeBSD используется команда netstat.

 

Когда вы запускаете ее с ключами -an (netstat -an) она выдает вам не только список уже установленных соединений, но и список всех тех сервисов, которые ожидают входящих соединений — т.е. ожидают подключения клиента. Такие соединения отображаются в виде следующих строчек:

 

Proto Recv-Q Send-Q Local Address Foreign Address (state)

tcp4 0 0 *.80 *.* LISTEN

tcp4 0 0 *.443 *.* LISTEN

 

Приведенные строки показывают, что какое-то программное обеспечение ожидает установки соединения (статус LISTEN) с любого входящего адреса (символы *.* в поле Foreign Address) на любой адрес установленный на данной машине (звездочка в нотации *.80) на порт 80 (число 80 в нотации *.80). То есть это показывает, что работает приложение, предположительно веб-сервер, которое слушает на восьмидесятом порту (http).

Вторая строчка обозначает то же самое, но для https соединений.

 

Если запускать команду netstat только с ключом -n (netstat -n), то вы увидите там только уже установленные соединения.

 

Как интерпретировать статусы соединений?

 

TCP соединение может быть в нескольких разных состояниях. Они отображаются в последнем столбце команды netstat.

 

Возможные варианты:

 

LISTEN — на сервере есть какое-то ПО, которое готово принимать соединения на данный порт и как-то их обрабатывать.

 

Все оставшиеся статусы относятся к уже установленным соединениям:

 

ESTABLISHED — это статус нормально работающего соединения, по которому может передается информация в данный момент — именно с ними сейчас занят веб-сервер.

Пример (10.11.12.13 — это адрес вашего веб-сервера, 83.139.27.170 — это адрес какого-то клиента). Это соединение к веб-серверу, так как в колонке Local Address после адреса сервера стоит .80 — а это именно номер порта, на который установлено соединение.

 

Proto Recv-Q Send-Q Local Address Foreign Address (state)

tcp4 0 0 10.11.12.13.80 83.139.27.170.1170 ESTABLISHED

 

 

TIME_WAIT — в этом состоянии находятся соединения, для которых со стороны сервера соединение уже закрыто, а вот со стороны клиента подтверждения о закрытии пока не получено. Это нормальное состояние. Даже если от клиента не будет получено подтверждение, то через 30 секунд соединение будет уничтожено (таймаут настраивается через sysctl net.inet.tcp.msl).

 

FIN_WAIT_2 — это те соединения, для которых сервер уже отослал клиенту пакет с уведомлением о закрытии соединения, получил подтверждение от клиента на этот пакет, но не получил со стороны клиента пакета, который бы требовал разрыва соединения. Да, в TCP соединение должны разорвать обе стороны :) и каждая должна подтвердить, что она получила это сообщение от противоположной стороны. Это нормальное состояние соединения, и пока у вас не много клиентов — меньше нескольких тысяч — можете смело не обращать на него внимания.

 

Соединения в статусах TIME_WAIT и FIN_WAIT_2 дают косвенное представление о скорость соединения ваших клиентов и надежности их связи. Если у них со связью все в порядке — вы будете видеть меньше соединений в таком состоянии.

 

CLOSE_WAIT — а вот на эти соединения нужно смотреть ОЧЕНЬ внимательно. Этот статус обозначает, что клиент со своей стороны разорвал соединение, а вот программное обеспечение сервера его не закрыло. Соединения могут пребывать в таком состоянии какое-то время, но они не должны накапливаться. Если вы видите, что у вас постоянно висят соединения в этом состоянии и их количество увеличивается — это показатель одной единственной вещи. У вас ошибка в веб-сервере.

 

У apache сервера такого статуса не случается, так как он очень быстро закрывает соединения со своей стороны, если их уже закрыл клиент. Но если вы пишите свой какой-то сетевой сервис — тогда будте крайне осторожны с этим статусом.

 

Пожалуй это все, что я хотел вам рассказать по отладке веб-сервера и соединений к веб серверу.

 

Все оставшееся вы можете прочитать в книжке по настройке и оптимизации веб-сервера.

 

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