Apache

17 August 2011 #apache#debian

После перехода на сервера Amazon, я сразу же установил в качестве веб-сервера nginx, который использовал в различных целях перед этим. Более трех месяцев он у меня проработал на отдаче статических сайтов, и тут мне вдруг захотелось попробовать в работе со статикой веб-сервер Apache. Ведь что-то должно быть в нем такого, из-за чего многие хостеры используют именно его?

Вариантов попробовать Apache в работе было несколько, а именно:

  1. Создать новый сервер, установить на нем Apache и проводить тесты.
  2. На текущем сервере установить Apache, настроить на использование порта, отличного от 80.
  3. Удалить nginx, и затем устанавливать в качестве основного веб-сервер Apache.

Создать новый сервер не составляет проблем, но если надумаю осуществить переход с nginx на Apache на основном сервере, придется дополнительно осуществлять третий вариант. Слишком много движений. Поэтому я выбрал второй вариант, как самый оптимальный.

Устанавливаем Apache:

$ sudo aptitude install apache2

Веб-сервер был установлен, но не запущен, в виду того, что на 80 порту уже работал nginx. Вполне нормальная ситуация. Теперь необходимо изменить файлы:

  • /etc/apache2/ports.conf
  • /etc/apache2/sites-available/default

В которых меняем используемый порт с 80 на 8080 (к примеру). После чего создаем новый домен/поддомен, который будет работать на данном веб-сервере и запускаем Apache:

$ sudo service apache2 start

На серверах Amazon, для того, чтобы увидеть работающий сервер, придется еще изменить политику безопасности, в которой требуется разрешить соединение по порту, который мы прописали для Apache.

Worker and Prefork

Apache может использовать различные мультипроцессорные модули (MPM), в Debian их насчитывается 4, но обычно используются только два: Prefork и Worker.

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

Данный модуль очень часто используется при работе с PHP или другими внешними скриптами.

Worker - это модуль, в котором создается несколько рабочих процессов, и при создании соединения, создается отдельный поток, который управляется этим процессом. Таким образом получается, что несколько работающих процессов могут контролировать очень большое число соединений.

Создание отдельного потока намного менее трудоемкая задача, чем создание процесса, поэтому протекает очень быстро, без задержек. И памяти при этом расходуется намного меньше.

Однако возникает небольшая проблема со стабильностью. Если процесс завершается аварийно, то множество соединений оказываются потерянными.

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

И так как я использую сейчас только статические сайты, проблем с отдельными процессами возникнуть не должно.

Кеширование

Попытался я было настроить кеширование на веб-сервере Apache и столкнулся с тем, что при прописывании новых правил в файл .htaccess получал 505 ошибку при попытке просмотреть страницы сайта. Долго не мог понять в чем дело, пока не вспомнил, что Apache представляет собой модульную систему, и для использование определенных возможностей необходимо включить определенный модуль:

$ sudo a2enmod expires
$ sudo service apache2 restart

И после включения модуля expires уже можно прописывать правила кеширования в файле .htaccess.

Для себя я выбрал следующие правила:

ExpiresByType text/html "now"
ExpiresByType image/gif "modification plus 1 year"
ExpiresByType image/png "modification plus 1 year"
ExpiresByType image/jpg "modification plus 1 year"
ExpiresByType image/ico "modification plus 1 year"
ExpiresByType text/js "modification plus 1 month"
ExpiresByType text/css "modification plus 1 month"

То есть html-файлы не кешируются, а отдаются непосредственно с сервера, все остальное кешируется на срок от 1 месяца до года.

Итоги

После проведения тестов я решил сменить nginx на Apache. Конечно памяти стало использоваться несколько больше, однако работать с apache, на мой взгляд, удобнее.

И что самое интересное, создается такое впечатление, что Apache на статике работает быстрее. Это конечно же не так, но впечатление довольно яркое!

И больше всего мне понравилась возможность вносить изменения в работу сайта без перезагрузки самого сервера, достаточно только внести изменения в файл .htaccess, как они тут же применяются.

На данный момент все работающие процессы на сервере потребляют от силы 96 мегабайт. При той производительности, что обеспечивает Apache и удобству работы, я думаю выбор становится очевидным.