Веб-cервер, отвечай на запрос!
Веб-сервер обрабатывает запросы от веб-браузера и отправляет http-ответ (html-страницу, видео, аудио и другие файлы). Есть несколько известных веб-серверов на любой вкус, но наибольшей популярностью пользуются Apache и nginx. Они ведут борьбу за первенство среди всех веб-серверов. В Спринтхост используются оба, но об этом попозже.
Старичок Apache
Существует легенда, что название Apache (по-русски просто апач) произошло от «a patchy server», что дословно переводится «сервер в заплатках». Мне больше нравится связь с индейским племенем апачи, но, как говорится, каждому свое. Апач начали разрабатывать, как раз чтобы закрыть дыры в популярном тогда NCSA HTTPd.
Огромный плюс этого веб-сервера в том, что его код, за исключением ядра, открытый. Поэтому разработчики имеют возможность создавать модули для основного ядра, которым, в свою очередь, занимаются сотрудники Apache Software Foundation. Модули позволяют выстроить нужную конфигурацию с различными функциями.
Ядро Apache написано на языке программирования C.
Ядро позволяет обрабатывать запросы без дополнительных модулей, но такое использование веб-сервера крайне ограничено. Например, сайт может использовать скрипты, написанные на JavaScript, а веб-сервер испугается незнакомого языка и не сможет обработать запрос. Поэтому модульная система крайне облегчает жизнь ядра и пользователя.
Кроме того, архитектура Apache достаточна проста для разработки новых модулей. Можно вписать код так, что в случае ошибки он не затронет весь процесс работы сервера. Апач стабильно работает как на UNIX-системах, так и на Windows.
Апач в момент появления стал крайне популярным благодаря своей системе модулей, а главное — из-за способности обрабатывать одновременно несколько запросов, но на сегодняшний день поток информации и трафик значительно увеличился с конца 90-х годов, поэтому Apache не всегда справляется с поставленными задачами.
Новичок nginx
Nginx появился чуть позже Apache и разрабатывался для решения проблем с производительностью апача, как когда-то он создавался, чтобы закрыть несовершенства NCSA HTTPd. Соответственно, nginx тоже написан на C и имеет открытый код. Единственное, что Nginx Inc. предоставляет платную поддержку пользователям.
Читаем вместе: нджинкс, нгинкс, энгинкс, энджинкс, энджин-икс.
Nginx гораздо быстрее обрабатывает статические данные сайта, а также выступает в качестве перераспределяющего прокси-сервера. То есть если nginx не может обработать запрос или знает, что другой веб-сервер справится лучше, то он передаст этот запрос backend-серверу .
У nginx более сложная архитектура, соответственно, разработка модулей становится труднее. Поддерживается всеми ОС, но на Windows может вести себя некорректно и с ошибками.
Как работает связка nginx и Apache?
Для начала опишем, что такое динамические и статические файлы. Статическими являются все файлы картинок, css, js, html — в общем все, что отдаются с диска как есть. Динамические — те файлы, которые выполняются на сервере, а результат отправляется пользователю. К таким данным обычно относятся скрипты.
Как бы ни были эти веб-серверы хороши по отдельности, вместе они полностью раскрывают собственный потенциал. Естественно, рассматривать их работу будем на примере сайтов на Спринтхост. Nginx работает как frontend-сервер, а Apache как backend.
Возьмем сайт, на котором есть как статические, так и динамические файлы. Молодой человек отправляет запрос на переход к сайту. В этот момент nginx ловит этот запрос и проверяет, может ли он его выполнить. В каких случаях у него не получится дать ответ самостоятельно? Если запрос требует динамические файлы. Nginx, конечно, умеет и их выполнять, но Apache делает это быстрее, поэтому здесь вступает в игру последний. Кроме того, у апача есть особый конфигурационный файл .htaccess (по-простому «штакес»), в котором могут быть прописаны директивы для Apache, соответственно, nginx их выполнить не сможет. В штакесе также можно указать, чтобы абсолютно все выполнял апач — статику и динамику.
В некоторых случаях веб-сервер выдаст ошибку, если есть проблемы в коде или права доступа не дают серверу добраться до нужного файла.
Пока мы рассказываем про веб-серверы, молодой человек все еще ждет ответа, поэтому продолжим. Получив запрос от nginx, апач обрабатывает его. И здесь два пути: либо он выполняет запрос и отдает его nginx, либо не выполняет его и отправляет код ошибки. В любом случае nginx ждет ответа, а потом отправляет его пользователю.
Но если запрос идет к статическим файлам, nginx уже не передает его апачу, а выполняет его самостоятельно. Соответственно, каждый работает с тем, что умеет лучше всего, и не лезет в чужие дела.
Apache и nginx — друзья навеки (пока не придумают веб-серверы лучше)
Оба веб-сервера хороши в своем деле. Nginx наращивает популярность, его используют для крупных и высоконагруженных сайтов по типу Яндекса или Netflix. Apache доказал свою состоятельность временем и усердной работой, даже когда nginx наступает ему на пятки, апач держит планку и отлично справляется там, где nginx работает хуже.
На виртуальных хостингах стараются использовать оба веб-сервера, они установлены там заранее. Кроме того, в Спринтхост можно добавить расширенные версии веб-сервера для Apache с увеличенной памятью для кеширования и дополнительными функциями и утилитами, например, xDebug.
Однако если вы хотите использовать других обработчиков, то можно воспользоваться VDS/VPS, на которых можно выстроить собственную конфигурацию.