Раздел помощи SpaceWeb

Что такое Nginx

18 июн, 2024

Nginx – это высокопроизводительный веб-сервер и обратный прокси-сервер с открытым исходным кодом. Он также может использоваться как почтовый (IMAP/POP3) и балансировочный сервер. Nginx был разработан в 2004 году, и с тех пор стал одним из самых популярных веб-серверов в мире.

Основные возможности и функции Nginx:

  • Высокая производительность и масштабируемость. Nginx изначально разработан для работы с большим количеством одновременных соединений. Он использует асинхронную, событийно-ориентированную архитектуру, которая позволяет ему эффективно обрабатывать множество запросов с минимальными накладными расходами на системные ресурсы.
  • Обратный прокси-сервер и балансировка нагрузки. Nginx может действовать как обратный прокси-сервер, принимая запросы от клиентов и перенаправляя их на другие серверы. Это позволяет распределять нагрузку между несколькими серверами, улучшая производительность и отказоустойчивость системы.
  • Статический контент. Nginx очень эффективен в обслуживании статического контента (HTML, CSS, JavaScript и изображения). Он может кешировать контент для дальнейшего улучшения производительности.
  • Поддержка различных протоколов. Nginx поддерживает HTTP/1.0, HTTP/1.1, HTTP/2, а также его можно настроить для работы с протоколом HTTPS.
  • Почтовый прокси-сервер. Помимо HTTP, Nginx может работать как прокси для почтовых протоколов (IMAP, POP3, SMTP), обеспечивая балансировку нагрузки и другие возможности для почтовых серверов.
  • Модульная архитектура. Nginx имеет модульную архитектуру, которая позволяет добавлять или удалять функциональные модули по мере необходимости. Существуют модули для компрессии данных, обработки SSI, перезаписи URL и многие другие.
  • Резервирование и отказоустойчивость. Nginx может быть настроен на автоматическое переключение на резервные серверы в случае сбоя основных серверов, обеспечивая непрерывность обслуживания.
  • Кеширование. Nginx поддерживает различные механизмы кеширования, включая кеширование на уровне диск и памяти, что позволяет значительно увеличить скорость доставки контента.
  • Безопасность. Nginx предоставляет различные функции безопасности, такие как поддержка SSL/TLS, ограничение доступа по IP-адресам, защита от DDoS-атак и другие.

Как работает Nginx 

Nginx функционирует как стандартный веб-сервер: он принимает запросы от клиента, например, браузера, и отправляет ему запрашиваемые файлы. Эти файлы могут включать HTML, CSS, текст, изображения, видео и JS-скрипты, необходимые для отображения страницы.

Рассмотрим его работу более детально.

Nginx использует многопроцессорную и многопоточную архитектуру, состоящую из основного (master) процесса и рабочих (worker) процессов.

  • Master-процесс управляет конфигурацией сервера и контролирует worker-процессы. Он отвечает за чтение и проверку конфигурационных файлов, управление сигналами и начальную настройку.
  • Worker-процессы непосредственно обрабатывают запросы клиентов. Каждый worker-процесс использует событийно-ориентированную, асинхронную модель, что позволяет ему обрабатывать тысячи соединений одновременно.

Главная особенность Nginx – это его способность работать асинхронно. Каждый запрос не занимает отдельный поток или процесс (как в традиционных веб-серверах) – Nginx обрабатывает запросы по принципу событийного цикла. Это позволяет серверу эффективно управлять ресурсами и минимизировать задержки.

Пример: 

Клиент запрашивает большой видеофайл. Nginx начинает передачу файла и сразу же освобождает ресурсы, чтобы обрабатывать другие запросы, не дожидаясь завершения передачи. Как только передача файла завершается, веб-сервер продолжает обработку связанных с этим запросом задач.

Когда Nginx получает запрос от клиента:

  1. Master-процесс принимает новый запрос и распределяет его одному из worker-процессов.
  2. Worker-процесс анализирует запрос и определяет, какой контент требуется. Если это статический файл, он считывается с диска и отправляется клиенту. Для динамического контента запрос может быть передан внешним серверам приложений (например, через FastCGI или uWSGI).
  3. Если Nginx настроен как обратный прокси-сервер, он перенаправляет запрос на другой сервер для обработки и затем возвращает ответ клиенту.
  4. Если включено кеширование, Nginx может сохранить результат обработки запроса для последующего использования, ускоряя доставку контента.
  5. После завершения обработки запроса Nginx освобождает ресурсы и переходит к следующему запросу.

Сравнение Nginx и Apache 

Параметр

Nginx

Apache

Архитектура

Асинхронная, событийно-ориентированная

Многопоточная/многопроцессная

Производительность

Высокая, особенно для статического контента

Высокая, но может быть ниже при высокой нагрузке

Модульность

Модульная, модули компилируются в сборку

Модульная, модули могут загружаться динамически

Обратное проксирование

Встроенная поддержка

Требует модулей (mod_proxy и др.)

Балансировка нагрузки

Встроенная поддержка

Требует модулей (mod_proxy_balancer)

Кеширование

Встроенная поддержка

Поддерживается через модули (mod_cache, mod_file_cache)

Обслуживание статического контента

Очень эффективное

Эффективное, но может быть медленнее Nginx

Обработка динамического контента

Требует внешних интерпретаторов (FastCGI, uWSGI)

Встроенная поддержка через модули (mod_php, mod_perl и др.)

Конфигурационные файлы

Единый файл (nginx.conf)

Множество файлов (httpd.conf, .htaccess и др.)

SSL/TLS поддержка

Встроенная поддержка

Поддержка через модуль (mod_ssl)

Поддержка HTTP/2

Встроенная поддержка

Поддержка через модуль (mod_http2)

Журналирование

Встроенная поддержка

Встроенная поддержка

Поддерживаемые операционные системы

Linux, Windows, MacOS, BSD

Linux, Windows, MacOS, BSD

Популярность и использование

Широко используется для проксирования и балансировки нагрузки

Широко используется для всех типов веб-серверов

Конфигурация и настройка

Простая, но требует изучения

Более гибкая, но может быть сложнее в изучении

Ресурсоёмкость

Низкая, особенно при большой нагрузке

Может быть выше Nginx, зависит от конфигурации

Ключевые различия:

  1. Nginx использует асинхронную событийно-ориентированную модель, что позволяет ему обрабатывать множество соединений одновременно с минимальными ресурсами.

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

  1. Nginx особенно эффективен для обработки статического контента и может быть лучшим выбором для сайтов с высоким трафиком.

Apache также эффективен, но может уступать Nginx при очень высоких нагрузках.

  1. Nginx требует использования внешних интерпретаторов для обработки динамического контента, таких как PHP-FPM для PHP.

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

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

Установка Nginx 

Веб-сервер Nginx можно установить на различные операционные системы, такие как Linux (включая дистрибутивы Ubuntu, Debian, CentOS и другие), Unix-подобные системы (например, FreeBSD или облачные серверы), а также на macOS.

Если вы планируете установить сервер на локальный компьютер с Windows, учтите, что это возможно только с некоторыми ограничениями, используя бета-версию Nginx. 

В этом разделе мы рассмотрим установку Nginx на Ubuntu, размещённой на хостинге. Это один из наиболее распространённых сценариев использования веб-сервера.

Установить Nginx можно несколькими способами: скачав нужный пакет с официального сайта или установив его из репозитория Ubuntu, где он доступен по умолчанию. Мы выберем второй вариант, так как он самый удобный.

  1. Прежде чем установить Nginx, рекомендуется обновить пакеты вашей системы, чтобы убедиться, что у вас установлены самые последние версии.

Откройте терминал и выполните следующие команды:

sudo apt update 
sudo apt upgrade -y 

  1. После обновления системы можно приступить к установке Nginx. Для этого выполните следующую команду:
sudo apt install nginx -y 

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

Запустите Nginx:

sudo systemctl start nginx 

  1. Проверьте статус Nginx:
sudo systemctl status nginx 

Вы должны увидеть сообщение, что сервис Nginx запущен и работает.

  1. Чтобы Nginx автоматически запускался при старте системы, выполните следующую команду:
sudo systemctl enable nginx

Основные команды для работы с Nginx

Запуск Nginx:

sudo systemctl start nginx 

Остановка Nginx:

sudo systemctl stop nginx 

Перезапуск Nginx:

sudo systemctl restart nginx 

Перезагрузка конфигурации Nginx:

sudo systemctl reload nginx 

Проверка состояния Nginx:

sudo systemctl status nginx

Настройка сервера Nginx 

UFW (Uncomplicated Firewall) – это удобная утилита для управления правилами брандмауэра в Linux. По умолчанию, все входящие соединения в UFW запрещены, поэтому нужно открыть необходимые порты для работы с Nginx.

Если UFW ещё не установлен, его можно установить с помощью команды:

sudo apt update sudo apt install ufw -y 

Для нормальной работы сервера необходимо открыть порты:

  • 22 для удалённого доступа по SSH.
  • 80 для связи между клиентом и сервером по протоколу HTTP.
  • 443 для связи между клиентом и сервером по протоколу HTTPS.

Откроем эти порты с помощью UFW:

sudo ufw allow 22 sudo ufw allow 80 sudo ufw allow 443 

Чтобы убедиться, что Nginx добавлен в список доступных приложений, выполните команду:

sudo ufw app list 

Вы увидите что-то подобное:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Теперь разрешим UFW доступ для Nginx HTTP:

sudo ufw allow 'Nginx HTTP' 

Чтобы убедиться, что правила применены правильно, проверьте статус UFW:

sudo ufw status 

Ожидаемый результат должен быть примерно таким

To                        Action      From
OpenSSH                   ALLOW       Anywhere                  
Nginx HTTP                ALLOW       Anywhere                  
OpenSSH (v6)              ALLOW       Anywhere (v6)             
Nginx HTTP (v6)           ALLOW       Anywhere (v6)
 

Проверьте статус Nginx, чтобы убедиться, что сервер работает корректно:

sudo service nginx status 

Вы должны увидеть сообщение

Active: active (running) since…

Теперь откройте в веб-браузере страницу вашего сервера, используя его IP-адрес (например, http://your_server_ip). Если установка и настройка выполнены правильно, вы увидите стандартную страницу приветствия Nginx.
 

Иерархия каталогов Nginx 

Для эффективного управления сервером Nginx важно понимать расположение и структуру его каталогов. Это знание поможет вам анализировать работу сервера, вносить необходимые изменения и устранять неполадки. Рассмотрим наиболее важные директории Nginx и их назначение.

Основные директории и файлы Nginx: 

  1. /var/www/html – это каталог, где находится начальная страница веб-сайта по умолчанию. В него размещаются HTML-файлы и другой статический контент.
  2. /etc/nginx – основная директория с файлами настроек Nginx. В ней находятся все конфигурационные файлы и папки, необходимые для настройки сервера.
  3. /etc/nginx/nginx.conf – главный конфигурационный файл Nginx. В нем определяются глобальные параметры сервера, такие как количество рабочих процессов, настройки логирования и включение модулей.
  4. /etc/nginx/sites-available – каталог с конфигурациями для каждого из сайтов. Здесь хранятся файлы конфигураций всех сайтов, независимо от их статуса (активные или нет). В этих файлах указываются такие параметры, как имя сайта, IP-адрес и прочие настройки.
  5. /etc/nginx/sites-enabled – каталог с конфигурациями только активных сайтов, которые обслуживаются Nginx. Сюда помещаются символические ссылки на файлы из sites-available для сайтов, которые должны быть активированы.
  6. /etc/nginx/snippets – каталог, который содержит сниппеты конфигураций, которые могут быть подключены к основным файлам конфигурации. Это полезно для повторного использования часто применяемых настроек.
  7. /var/log/nginx – директория с логами событий Nginx. Здесь хранятся файлы журналов, в которых записываются ошибки сервера и доступ к сайту.

Основные файлы:

  • access.log (логи доступа, которые фиксируют все запросы к серверу);
  • error.log (логи ошибок, которые содержат информацию о проблемах и сбоях в работе сервера). 

Конфигурация и архитектура Nginx

Работа Nginx и его модулей управляется директивами, прописанными в конфигурационных файлах. Функциональность сервера напрямую зависит от правильности этих настроек.

При установке и настройке Nginx основные директивы прописываются автоматически, однако при необходимости вы можете редактировать их или добавлять сторонние файлы конфигураций.

Конфигурация Nginx делится на два уровня: глобальный и локальный. Глобальный уровень отвечает за работу всего сервера, тогда как локальный – за настройку отдельных сайтов.

Синтаксис директив

Имя_директивы [Значение1] [Значение2] [Значение3…];

  • Разделителями служат пробелы или табуляции.
  • Каждая директива завершается точкой с запятой.

Пример простой директивы:

access_log /var/nginx/access.log main;

Пример директивы с несколькими значениями:

index index.html index.htm;

Блочные директивы:

Некоторые параметры могут быть блочными, состоять из нескольких строк и содержать вложенные директивы. Такие блоки заключаются в фигурные скобки:

server {
    listen 80;
    server_name example.com;
    location / {
        root /var/www/html;
    }
}

Просмотр и редактирование конфигурационных файлов

Для редактирования основного конфигурационного файла используйте команду:

sudo nano /etc/nginx/nginx.conf

Этот файл обычно состоит из множества строк. Рассмотрим основные директивы и их значение:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
    worker_connections 1024;
}
http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    server {
        listen 80;
        server_name example.com;
        location / {
            root /var/www/html;
            index index.html index.htm;
        }
        location /images/ {
            root /var/www/images;
        }
    }
}

Где:

  • user – имя пользователя, под которым запускается Nginx.
  • worker_processes – количество рабочих процессов. Значение auto автоматически устанавливает его равным количеству процессорных ядер.
  • pid – файл, который содержит идентификатор главного процесса.
  • events – блок с параметрами, которые влияют на сетевые соединения.
  • worker_connections – максимальное количество соединений, которые может обслуживать один рабочий процесс.
  • http – контекст, который содержит директивы для работы HTTP.
  • include – подключение дополнительных конфигурационных файлов.
  • default_type – MIME-тип ответов сервера по умолчанию.
  • server – блок с конфигурацией виртуального сервера.
  • listen – порт, который прослушивается (в данном случае 80 для HTTP).
  • access_log – путь к файлу, в котором сохраняется история обращений к серверу.
  • root – корневая директория для запросов.
  • index – имя файла, который будет использоваться как индексная страница.

Заключение

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

Кроме того, Nginx легко настраивается и поддерживает широкий спектр функций: обратное проксирование, кеширование, SSL/TLS-терминация и многое другое. Всё это делает Nginx незаменимым инструментом для веб-разработчиков и системных администраторов, стремящихся к высокой производительности и надёжности своих веб-сервисов.