В этой статье, посвященной веб-серверам, вы найдете ключевые термины, команды и ресурсы для дальнейшего обучения.
Веб-серверы действуют как посредники между запросом (например, URL-адресом, который вы вводите в браузере) и ответом на этот запрос (например, веб-страницами, привязанными к определенному URL-адресу). После того, как вы установили веб-сервер для обработки запросов, вы сможете создать стек, необходимый для разработки веб-приложений.
Здесь мы собрали основные понятия и разделили их на три главы: основные термины, настройка и изменение вашего веб-сервера с помощью команд Linux, а также сетевые протоколы.
Читайте также:
Что такое веб-сервер?
Веб-сервер обслуживает файлы, необходимые для отображения веб-приложения в вашем браузере по протоколам HTTP и HTTPS. Веб-приложение — это программное обеспечение, к которому можно получить доступ через браузер и с которым могут взаимодействовать конечные пользователи.
При выборе веб-серверов нужно учитывать следующие моменты:
- Высокое время безотказной работы и быстрая загрузка при стабильном использовании
- Одновременный доступ многих пользователей
- Масштабируемость по мере роста аудитории и пользовательской базы
- Простая и воспроизводимая установка и настройка
- Четкая документация
- Поддержка разработчиков (включая краткосрочные исправления и долгосрочные обновления программы).
- Поддержка сообщества и внедрение нового программного обеспечения
Читайте также: Введение в сетевую терминологию, интерфейсы и протоколы
Чтобы лучше разобраться в работе веб-серверов, необходимо иметь представление о нескольких важных терминах:
- Порт — это адрес на одной машине, который может быть привязан к определенной части программного обеспечения. Это не физический интерфейс или местоположение, но он позволяет вашему серверу взаимодействовать с более чем одним приложением.
- Протокол — это набор правил и стандартов, определяющих язык, который устройства могут использовать для коммуникации. К протоколам низкого уровня относятся TCP, UDP, IP и ICMP. Самыми яркими примерами протоколов прикладного уровня, основанных на вышеперечисленных протоколах, являются HTTP (для доступа к веб-контенту), SSH, TLS/SSL и FTP.
- Брандмауэр — это система, обеспечивающая сетевую безопасность путем фильтрации входящего и исходящего сетевого трафика на основе набора определяемых пользователем правил. Самые распространенные брандмауэры – это Iptables, UFW и Fail2Ban.
- DNS, или система доменных имен — это протокол прикладного уровня, который связывает доменное имя (например, настраиваемый URL-адрес) с определенным IP-адресом.
- HTTP-сервер — это веб-сервер, который использует протокол HTTP для связи по компьютерной сети.
- HTTPS – это безопасный HTTP, он шифрует связь с помощью протоколов Transfer Layer Security (TLS) или Secure Sockets Layer (SSL). Чтобы включить сервер HTTPS и шифрование SSL/TLS, нужно создать и включить сертификат SSL через центр сертификации, например Let’s Encrypt.
- Прокси-сервер используется как дополнительный уровень безопасности и действует как шлюз между клиентами и серверами, направляя трафик HTTP-запросов на веб-серверы. Как и Apache, Nginx был разработан для использования в качестве обратного прокси-сервера.
Читайте также:
- Прокси-серверы: все, что нужно о них знать
- Основы работы с Nginx: проксирование, балансировка нагрузки, буферизация и кэширование
При создании приложений большое значение имеет установка веб-сервера – ведь именно он обслуживает файлы веб-приложений. Веб-серверы могут обрабатывать статический и динамический контент, особенно в ответ на HTTP-запросы, которые обращаются к домену сайта. Вы можете управлять настройками с помощью командной строки, чтобы веб-сервер мог обрабатывать эти запросы
Настройка веб-сервера с помощью командной строки
Вы можете настраивать и обновлять свой веб-сервер с помощью команд:
- chown – меняет владельца файла.
- chmod – устанавливает или изменяет права доступа к файлам.
- curl – передает данные по указанному адресу (URL).
- hostname – устанавливает или отображает имя хоста и домена.
- systemctl – управляет системным менеджером systemd
Также вы наверняка работали с systemd, который управляет стартовыми процессами (init), которые запускаются при загрузке системы Linux. Сценарии запуска системы обычно хранятся в каталоге /etc/init.d, для него требуется доступ root или sudo, а лог-файлы можно найти в /var/log.
Читайте также: Управление сервисами и юнитами Systemd с помощью Systemctl
Кроме того, если вы создавали сертификаты Let’s Encrypt, вы наверняка использовали Certbot с опцией –standalone.
Настройка файлов сервера
Файлы конфигурации предоставляют настройки для веб-серверов и могут быть отредактированы в соответствии с вашими потребностями.
Конфигурационные файлы обычно находятся в каталоге /etc. Их можно редактировать с помощью редактора, такого как nano или vim.
Веб-файлы (которые используются для обслуживания веб-страниц) часто располагаются в /var/www. Их можно обновить с помощью редактора командной строки или с помощью интегрированной среды разработки (IDE).
На своем удаленном сервере вы устанавливали и настраивали веб-серверы с открытым исходным кодом – Apache или Nginx. Они вместе обслуживают примерно 50% всего веб-трафика.
Брандмауэр будет работать перед веб-серверами или любыми другими серверами приложений, чтобы управлять входящим и исходящим трафиком. Брандмауэр по умолчанию для Ubuntu — это uncomplicated firewall или ufw, который управляет брандмауэром iptables.
Читайте также: Как выбрать эффективную политику брандмауэра
Apache и Nginx регистрируются в брандмауэре при установке и у каждого из них есть три профиля, которые настроены для обслуживания общих портов.
Порт | Профиль Apache | Профиль Nginx |
Открыть только порт 80 | Apache | Nginx HTTP |
Открыть порт 80 и 443 | Apache Full | Nginx Full |
Открыть только порт 443 | Apache Secure | Nginx HTTPS |
Работа с Apache
Apache использует файлы .htaccess для децентрализованных настроек его конфигурации. Это значит, что вы можете вносить изменения в конфигурацию на уровне каталога. То есть, помимо основного файла конфигурации Apache вы можете создавать файлы .htaccess, которые предоставляют детализированные параметры для настройки.
Виртуальные хосты Apache для каждого сайта хранятся в /etc/apache2/sites-available/, их можно связать симлинком с каталогом /etc/apache2/sites-enabled/.
Фрагменты конфигурации, не связанные с виртуальными хостами, также хранятся в /etc/apache2/conf-available/ и связываются с /etc/apache2/conf-enabled/.
Логи доступа хранятся в /var/log/apache2/access.log, а сообщения об ошибках записываются в лог /var/log/apache2/error.log в соответствии с директивой LogLevel, которая хранится в глобальном файле конфигурации /etc/apache2/apache2.conf.
Термины Apache, которые нужно знать:
- Виртуальные хосты. Каждый виртуальный хост описывает отдельный сайт или домен, который можно настраивать независимо, и это позволяет обслуживать разный контент с одного сервера.
- Многопроцессорные модули Apache (MPM) обрабатывают клиентские запросы, но одновременно на сервер может быть загружен только один MPM. Обычно используемые модули, такие как mpm_prefork и mpm_worker, для ответа на запросы полагаются на многопоточную систему. Модули хранятся в каталогах /etc/apache2/mods-available/ и /etc/apache2/mods-enabled/.
Использование Nginx
Nginx использует сопоставление URI для обработки своих файлов конфигурации. Унифицированный идентификатор ресурса — это уникальная строка символов для различения ресурсов.
Конфигурационные файлы хранятся в каталоге /etc/nginx. Блоки server для каждого сайта находятся в /etc/nginx/sites-available и связываются с каталогом /etc/nginx/sites-enabled симлинком.
Логи доступа находятся в /var/log/nginx/access.log, а сообщения об ошибках записываются в /var/log/nginx/error.log.
Термины Nginx, которые нужно знать:
- Блоки server — это сведения о конфигурации, с помощью которых можно размещать несколько доменов на одном сервере. Как правило, конфигурации блоков server хранятся в каталоге etc/nginx/sites-available. Но блок, включенный по умолчанию в Ubuntu 22.04, можно найти в каталоге /var/www/html.
- Символические ссылки (симлинки) функционируют как ярлыки, ведущие к другому файлу или папке на машине. Символическая ссылка не содержит данных, а указывает на файл с данными. Файлы в каталоге /etc/nginx/sites-enabled символически связаны со своими аналогами в /etc/nginx/sites-enabled.
- Рабочие процессы. Nginx обрабатывает клиентские запросы с помощью рабочих процессов через цикл обработки событий. Рабочие процессы однопоточные, а соединения управляются асинхронно внутри цикла (в отличии от многопоточной системы Apache).
Сетевые коммуникации и протоколы безопасности
Сетевые коммуникационные протоколы часто бывают многоуровневыми, а поверх протоколов TCP и UDP часто используется криптография. TCP (transmission control protocol) обрабатывает взаимодействия посредством передачи пакетов в “трехстороннем рукопожатии”. UDP (user datagram protocol) тоже может передавать данные.
TLS (transport layer security) и предшествующий ему SSL (secure sockets layer) — это криптографические протоколы, которые помещают обычный трафик в защищенное зашифрованное соединение.
Для того, чтобы убедиться, что обе стороны подтверждают запрос, TCP использует протокол рукопожатия. UDP не делает этот шаг проверки при отправке данных на хост, благодаря чему соединение получается более быстрое, но менее надежное.
TCP и UDP также могут повлиять на выбор политики брандмауэра.
HTTP — это протокол прикладного уровня, работающий поверх TCP. Короче говоря, TCP определяет, как пакеты передаются по сети, а HTTP и HTTPS предоставляют инструкции о том, как обрабатывать данные этих пакетов.
При использовании Certbot для создания SSL-сертификата Let’s Encrypt вы также можете создать самозаверяющий сертификат для шифрования связи между вашим сервером и любыми клиентами.
Читайте также:
- Создание самоподписанного SSL-сертификата для Apache
- Создание самоподписанного SSL-сертификата для Nginx
Самоподписанный сертификат – это такой сертификат, который не был подписан ни одним из доверенных центров сертификации, включенных в веб-браузеры и операционные системы, поэтому пользователи не могут использовать такой сертификат для автоматической проверки подлинности вашего сервера. В результате пользователи будут видеть ошибку безопасности при посещении вашего сайта.
Что дальше?
Теперь, когда вы установили свой веб-сервер, вы можете по мере необходимости создавать дополнительные серверные блоки или виртуальные хосты, изменяя файлы конфигурации в соответствии с потребностями ваших веб-приложений. Кроме того, вы можете попробовать настроить Nginx в качестве обратного прокси для Apache.
Чтобы лучше понять работу брандмауэров или перенастроить параметры брандмауэра вашего веб-сервера, попробуйте эти учебные пособия:
- Что такое брандмауэр и как он работает?
- Как выбрать эффективную политику брандмауэра
- Настройка брандмауэра UFW на сервере Ubuntu 20.04
- Как работает фаервол IPTables
- Как fail2ban защищает сервисы Linux
Вы также можете подумать об установке стека программного обеспечения с открытым исходным кодом, которое обычно используется вместе для обслуживания веб-приложений, таких как стек LAMP, LEMP или LOMP.
Обладая новыми знаниями о веб-серверах, вы также можете усовершенствовать свои навыки работы с базами данных, контейнерами и безопасностью.