Программирование и компьютерное дело - это перспективно, передний край информационных технологий, высокая квалификация специалистов, сложные системы и «стабильно растущий» поток ограничений. Принято говорить о больших достижениях и замечательных перспективах, но мало кто говорит о реальной ситуации.
Задолго до виртуального хоста или серверного блока «клиент интернета» был ограничен диапазоном адресации IPv4. Это считалось достаточным. В 2011 году IANA распределила оставшиеся блоки адресов региональным регистраторам и появился очередной (вроде как бесконечный) «предел» - IPv6.
Хост, сервер и серверный блок
Каждый веб-сервер в интернете имеет уникальный адрес. Не суть важно, по какому протоколу он доступен и к какой адресации он относится. Важно что он один, а реальная потребность имеет обыкновение расти. Виртуальные хосты, субдомены или несколько доменных имен - нормальное положение вещей для одного сервера.
Адрес точки в пространстве определяет все, включая саму точку. Виртуальный хост - идея Apache. Одинокая точка на сервере - нонсенс, который, возможно, когда-то существовал.
Установка Apache и/или NGiNX - это работа одного веб-ресурса. Второй ресурс никогда не отличается от первого. Перспективные информационные технологии, не столь перспективны, чтобы предоставить уникальность каждому процессу, каждому приложению или веб-ресурсу. Все всегда однотипно и формально работает.
Хост или виртуальный хост - терминология Apache. Серверный блок - это термин NGiNX. В первом властвует «.htaccess», во втором можно регулярным выражением определить, что и как именно делает серверный блок.
Хост - это точка в интернет-пространстве, кто и как ее обслуживает - неважно. Но важно, насколько стабильно, надежно, безопасно и эффективно работает то, что обслуживает конкретный хост.
Традиция: поток ограничений
Сегодня уже мало кто помнит, сколько проблем связано с числом 640. Забылись проблемы с двумя цифрами для обозначения года. А ведь барьер в 640 Кб оперативной памяти преодолевался долго и сложно, а переход от 1999 года к 2000-му показал, насколько ограничены представления компьютерных специалистов о информации и вопросах ее формализации в динамике времени.
Если копнуть глубже, то проблем в языках программирования, операционных системах и прикладных программах накопилось такое великое множество, что несовместимость версий тех или иных разработок стала меньшей бедой из возникающих время от времени.
Сказанное относится к хостингу в первую очередь. Программирование окончательно перекочевало на веб-серверы и ушло в область распределенной обработки информации. Работа над современными программными изделиями - это деятельность многонационального коллектива специалистов, распределенных по всему миру.
Выбирая сервер, формируя концепт развития компании в области представления и обработки информации, важно ориентироваться на более-менее динамичные инструменты и стараться не закладывать в фундамент ограничения.
Мудрость или молодость: Apache и NGiNX
Серверов много в интернете. Что лидирует, сказать трудно. Можно верить различным википедиям и компетентным источникам. Но особого смысла для такой веры нет. Может быть, несколькими годами ранее властвовал Apache. Вполне может быть, что сегодня серверов под NGiNX действительно более 24 миллионов.
На просторах интернета можно встретить и Apache, и NGiNX, а также IIS, lighttpd, Google Web Server, Resin, Cherokee, Rootage, THTTPD, Open Server и массу самостийных разработок. Какой вариант лучший, сказать трудно.
Важно: Apache сыграл свою роль и продолжает удивлять стабильностью работы, а NGiNX начал карьеру значительно позже и (с нуля) пошел дальше. «Энджин-Икс» завоевал доверие как надежный веб-сервер нового поколения, основанного на событиях и идее отделения статики от динамики.
Apache & NGiNX могут работать в связке. Последний может проксировать поток запросов от браузеров и перераспределять нагрузку, выполнять почтовые функции и манипулировать потоками данных адекватно складывающейся ситуации.
NGiNX (отечественная разработка Игоря Сысоева) молод, амбициозен и имеет большие планы. Apache «мудр», стабильно развивается и уверенно поддерживает многомиллионную аудиторию веб-ресурсов.
Оба продукта предоставляют возможность организации виртуальных хостов в любом количестве, но здесь опять возникают ограничения: любой хост - это «ручная работа», автоматом ни Apache, ни NGiNX ничего никогда не делают.
Виртуальный хост
Один веб-сервер - один веб-ресурс. Так не было никогда, а если и было, то давным-давно забылось. Современный сервер обязан содержать то количество дополнительных хостов, сколько необходимо.
Желательно, чтобы настройка хоста выполнялась автоматически, но данное желание невозможно реализовать. Программирование - это система ограничений на том простом основании, на котором каждое решение (алгоритм или программа - в первую очередь), принятое человеком, застывает в конкретной форме и само по себе не может адаптироваться к изменяющимся условиям существования.
Основной хост - это тот же IP-адрес, что выделен серверу. Виртуальный хост, поддерживаемый этим же сервером, может обслуживать несколько IP-адресов, доменных имен или субдоменов (один сервер - множество сайтов).
Существенный момент: ассоциация любого доменного имени с IP-адресом - это компетенция внешних серверов. В основном это система специальных ресурсов (DNS), обеспечивающих функционирование интернета.
При создании нового доменного имени и указании адреса, по которому он физически находится, система специальных серверов должна получить нужную ей информацию. Распространение такой информации занимает время. Этот момент нужно учитывать при перемещении сайтов, серверов под сайты и при создании виртуальных хостов.
На начальном этапе, когда хост только создан, можно получить ошибку: веб-ресурса нет или он недоступен. Нужно время, чтобы о факте появления нового хоста узнал, если не весь мир, то хотя бы та его часть, что находится вблизи разработчика или посетителя.
Подготовка и установка
Настройка NGiNX на UBUNTU - это хорошее сочетание надежного веб-сервера и отличной операционной системы. Весь арсенал функций UBUNTU поддерживается компонентами NGiNX, что обеспечивает безопасный и стабильный результат.
Можно установить NGiNX и Apache. Настройка двух серверов в паре дает широкие возможности. Чтобы поставить NGiNX, достаточно одной команды: "sudo apt-get install nginx".
Сервер стал, можно работать. Рекомендуется перед установкой обновить систему. Лучший вариант - новый сервер делать с нуля, то есть предварительно переустановить операционную систему.
Ничто не мешает установить NGiNX на работающую машину. Достаточно указанной (apt-get install nginx) команды и веб-сервер готов к работе.
Помимо команды «service nginx status» можно воспользоваться командой «systemctl status nginx» - эффект одинаковый. Корневая папка, в которой будет размещаться сайт, пока только одна.
На этом завершена базовая установка. Настройка сервера NGiNX и виртуальных хостов доступна.
Файервол: разрешение потоков запросов
Действующие профили NGiNX можно посмотреть командой (UBUNTU) "ufw app list".
Включать или не включать файервол, зависит от конкретной ситуации, но его наличие повышает стабильность и безопасность системы.
Сразу после установки данная команда покажет:
- Nginx Full - открыты порт 80 - http и порт 443 - https.
- Nginx HTTP - доступен стандартный 80 порт.
- Nginx HTTPS - доступен стандартный 443 порт (TLS/SSL).
Командой "ufw allow" можно добавить правила. Если правило уже действует, система выдаст соответствующее сообщение.
Это фундамент NGiNX: настройка и подготовка завершены в целом. Виртуальные хосты - это начало гораздо более сложной работы.
NGiNX: настройка хостов (серверных блоков)
Сразу после установки конфигурация NGiNX записана в папке /etc/nginx:
Для того чтобы создать новый виртуальный хост, необходимо записать его в папку /etc/nginx/sites-available и включить его в папке /etc/nginx/sites-enabled.
Включение (активация) нового хоста выполняется путем создания символической ссылки: ln -s /etc/nginx/sites-available/vhost1 /etc/nginx/sites-enabled/ в папке активных виртуальных хостов.
NGiNX на CentOS
Подготовка к установке и настройке NGiNX на CentOS отличаются от UBUNTU. Существует мнение, что UBUNTU - это надежный, но «рабоче-домашний» вариант сервера в исполнении «server» и «desktop», а CentOS - это сервер крупных предприятий. Оба сервера отлично зарекомендовали себя, но настройки отличаются.
Здесь показано, как был установлен веб-сервер, и он поддерживает один виртуальный хост. Файервол был отключен с тем, чтобы разрешить свободный поток запросов. Причина в том, что настройка NGiNX в CentOS 7 требует доступа к портам 80 и 443. Здесь это делается несколько сложнее, чем в UBUNTU, а информация по этому вопросу выходит за рамки статьи.
Элементарные виртуальные хосты NGiNX
Файл конфигурации NGiNX - настройка основного хоста. Находится в папке /etc/nginx/conf.d.
Сразу после установки веб-сервера в файле конфигурации основного хоста практически все закомментировано, указано только, где находится папка хоста, и его главный файл.
Три минуты работы - и рядом с указанным адресом появилось еще три папки, которые определяют три новых виртуальных хоста: irm2, irm4, irm8, которые висят на одном адресе 192.168.1.46 (irm0) и обслуживаются данным сервером.
Естественно, не следует забывать:
- про права на папки;
- содержание файлов hosts, всех компьютеров, которым будут доступны виртуальные хосты (касается локальной сети, а не внешнего доступа, когда веб-сервер смотрит в интернет, там все решают серверы DNS);
- обязательную перезагрузку NGiNX после изменений;
- в файле конфигурации хоста меняется не только адрес (root), но и имя сервера (server_name).
Создание виртуальных хостов - дело не совсем простое.
Реальные виртуальные хосты и ограничения
Фактически NGiNX (установка и настройка) - это не сложно. В разных линуксах есть свои особенности, но все доступно и понятно.
В реальности веб-серверу приходится сталкиваться с квалифицированным разработчиком или компетентным заказчиком.
Управление сервером Apache - это множество правил файла «.htaccess». В зависимости от использованной системы управления сайтом (CMS), в корневой папке может оказаться файл «.htaccess» с парой десятков правил и еще десяток «.htaccess» будет раскидано по важным папкам для целей защиты или управления.
Управление сервером NGiNX - это регулярные выражения и значительно более легковесные правила. Но в любом случае только практика поможет создать правильные файлы конфигурации, которые будут работать и которые можно будет легко уточнять по необходимости.
Идеально, когда «.htaccess» пустой, а файл конфигурации виртуального хоста не изменялся (конфиг NGiNX: настройка = применение). Чем больше записано в конфигурации, тем больше ограничений установлено изначально, тем сложнее будет перенести, перенастроить или просто вспомнить.
Регулярные выражения в логике NGiNX - прогресс по сравнению с громоздкими правилами «.htaccess». К примеру, для NGiNX настройка https или http проще и понятнее. Если Apache «закручен» на PHP в его классическом режиме работы, то NGiNX изначально ориентирован на быстрый вариант «php-fpm». Для NGiNX SSL настройка - это «родной» элемент, а не сторонний, требующий дополнительного внимания.
В любой реальной ситуации, как в юриспруденции: меньше скажешь (напишешь) - меньше на себя возьмешь (меньше потратишь времени впоследствии на решение проблем). Любая конфигурация - это ограничение, чем меньше этих ограничений, тем лучше! Главное - не Apache или NGiNX и настройка их конфигураций, главное - веб-ресурсы, которые поддерживает сервер.
Реальность и динамичность
Современное представление об информационных технологиях сопровождается восторженными описаниями достижений. Но как только будет утеряна хотя бы одна запятая, точка или иной символ, задействованные в директиве, правиле, алгоритме, станет понятной задача: найти иголку в стоге сена.
Меньше стог - меньше проблем. Чем больше динамики в коде сайта, чем больше записано в файлах конфигурации комментариев, а не правил, тем больше шансов на долгую и успешную жизнь веб-сервера и его виртуальных хостов.
А ЧТО ВЫ ДУМАЕТЕ ОБ ЭТОМ?