Nginx: что это и как работает веб-сервер

Любой сайт — это набор HTML-файлов, стилей и картинок. Для отображения страницы компьютер отправляет серверу HTTP-запрос, запрашивая необходимые файлы. Сервер отвечает HTTP-ответом, содержащим запрашиваемую страницу.

Веб-сервер и сервер: в чём разница?

Как сервер находит файлы и отвечает на запросы? Ответ — веб-сервер. Это специальная программа, установленная на сервере (компьютере). Веб-сервер — это программа, а сервер — это компьютер, на котором она работает. Без веб-сервера современный интернет был бы невозможен.

Веб-сервер принимает HTTP-запросы от клиентов (пользователей сайта) и отправляет HTTP-ответы, содержащие страницы с информацией.

Nginx: один из лучших веб-серверов

Nginx (произносится как «Энджин экс») — один из самых популярных веб-серверов с открытым исходным кодом, написанный на языке Си. Он является промежуточным звеном между пользователями и серверным оборудованием.

Установка и настройка Nginx

Для использования Nginx необходимо установить его на серверном компьютере. После установки ввод IP-адреса сервера в адресную строку браузера покажет, работает ли Nginx. Настройка для конкретного сайта включает работу с папками и файлами:

  • Папка с файлами сайта: Создаётся вручную; имя последней директории должно совпадать с именем домена.
  • Главный конфигурационный файл Nginx: содержит основные настройки.
  • Папка sites-available: здесь хранятся конфигурационные файлы для каждого сайта (расширение .conf).

В файле конфигурации (sites-available/*.conf) создаётся блок server:

  • listen 80; — веб-сервер ожидает запросы на порту 80.
  • server_name yourdomain.ru; — веб-сервер обрабатывает запросы к указанному домену.
  • Блок location определяет путь к файлам сайта (root /путь/к/файлам) и имя основного файла (index index.html;).

Эта базовая конфигурация подходит для многостраничных сайтов, но не учитывает статический контент (картинки, стили).

Добавление статического контента и HTTPS

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

Современные сайты используют HTTPS. Для этого нужен SSL/TLS сертификат (например, бесплатный Let’s Encrypt). Конфигурация должна перенаправлять HTTP-запросы на HTTPS (порт 443) с помощью оператора return 301;. В конфигурации HTTPS указывается сертификат и ключ.

Кэширование

Для ускорения загрузки страниц используется кэширование. Добавление строки expires 1d; в блок со статическими файлами заставляет браузер кэшировать информацию на один день.

Основные настройки в nginx.conf

Файл nginx.conf содержит основные настройки:

  • user — пользователь, от имени которого работает Nginx.
  • worker_processes auto; — количество ядер процессора для обработки подключений (auto — автоматический выбор).
  • worker_connections — количество одновременных подключений.
  • gzip on; — включение сжатия файлов.

Nginx: преимущества и ограничения

Nginx обрабатывает запросы асинхронно, разделяя их на небольшие соединения и обрабатывая параллельно. Это делает его очень быстрым.

Однако, Nginx имеет ограничения в работе с микросервисами:

  • Поддержка только протокола HTTP (не поддерживает gRPC и др.).
  • Ограничения в маршрутизации запросов.
  • Низкая масштабируемость по сравнению со специализированными инструментами (например, Linkerd).

Nginx может использоваться как балансировщик нагрузки, распределяя запросы между серверами для предотвращения перегрузки.

Nginx vs Apache

Главный конкурент Nginx — Apache. Nginx изначально создавался как более быстрая альтернатива Apache для обработки статического контента. Nginx превосходит Apache в обработке статического контента, а Apache лучше справляется с динамическим. Можно использовать Nginx и Apache вместе: Nginx для статического контента (фронтенд), Apache для динамического (бэкенд).

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

Что будем искать? Например,программа