Лев Корольков
Руководитель IT-департамента EFSOL Oblako
Время чтения: 13 мин

Nginx

Веб-сервер и прокси

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

Nginx широко применяется в веб-инфраструктуре, облачных сервисах, корпоративных системах, контейнерных средах и высоконагруженных проектах. Он может работать как самостоятельный веб-сервер или находиться перед приложениями на PHP, Python, Java, Node.js и других технологиях.

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

Что такое Nginx простыми словами

Nginx можно представить как диспетчера, который принимает входящие запросы и решает, что с ними делать.

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

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

Благодаря такой универсальности его часто устанавливают на внешнем уровне серверной инфраструктуры перед одним или несколькими приложениями.

Для чего используется Nginx

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

  • раздача HTML, CSS, JavaScript, изображений и других файлов;
  • работа в роли Reverse Proxy;
  • балансировка нагрузки между серверами;
  • терминация HTTPS;
  • кэширование ответов;
  • маршрутизация запросов по доменам и URL;
  • ограничение количества запросов;
  • передача запросов приложениям;
  • централизованное ведение журналов доступа и ошибок;
  • публикация нескольких сайтов на одном сервере.

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

Когда браузер открывает сайт, он устанавливает соединение с сервером, на котором работает Nginx. Программа анализирует запрос и сопоставляет его с правилами конфигурации.

После этого возможны разные сценарии.

ЗапросДействие Nginx
Статический файлЧитает файл с диска и возвращает его пользователю
Динамическая страницаПередает запрос приложению или другому серверу
APIМаршрутизирует запрос на соответствующий backend
HTTPSОбрабатывает TLS-соединение и сертификат
Несколько backend-серверовВыбирает один из них по алгоритму балансировки

Конкретное поведение задается конфигурацией. Администратор определяет домены, порты, пути, backend-серверы, правила кэширования и ограничения.

Nginx как веб-сервер

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

Например, если страница сайта содержит десять изображений и несколько CSS-файлов, браузер отправляет отдельные запросы к серверу. Nginx обрабатывает их и возвращает необходимые ресурсы.

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

Nginx как Reverse Proxy

Один из наиболее распространенных сценариев использования Nginx — работа в роли обратного прокси.

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

Например, сайт доступен пользователю по стандартному HTTPS-порту, а приложение работает внутри сервера на порту 8000. Nginx принимает внешний запрос и передает его приложению.

Это позволяет не публиковать внутренний сервис напрямую в интернет и централизованно управлять доменами, сертификатами и правилами доступа.

Nginx и статический контент

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

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

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

Nginx и PHP

Nginx сам по себе не выполняет PHP-код. Для этого используется отдельный процесс, например PHP-FPM.

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

КомпонентЗадача
NginxПринимает HTTP-запросы и управляет маршрутизацией
PHP-FPMВыполняет PHP-код
ПриложениеФормирует бизнес-логику и динамический контент
База данныхХранит информацию приложения

Такая архитектура часто используется в WordPress, интернет-магазинах и других PHP-проектах.

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

Если один сервер приложения перестает справляться с количеством пользователей, можно запустить несколько одинаковых экземпляров приложения и распределять запросы между ними.

Nginx может выполнять роль Load Balancer и выбирать backend для каждого нового запроса.

АлгоритмПринцип работы
Round RobinЗапросы распределяются между серверами по очереди
Least ConnectionsВыбирается сервер с меньшим количеством активных соединений
IP HashВыбор backend зависит от IP-адреса клиента
Весовая схемаБолее производительный сервер может получать больше запросов

Балансировка помогает масштабировать приложение и уменьшать нагрузку на отдельный сервер.

Nginx и HTTPS

Nginx часто используется как точка завершения HTTPS-соединения. Он принимает зашифрованный трафик, использует TLS-сертификат и после расшифровки передает запрос внутреннему приложению.

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

При необходимости соединение между Nginx и внутренними серверами также может быть защищено.

Что такое server block

Server block — логический блок конфигурации Nginx, который описывает поведение отдельного сайта или виртуального хоста.

В нем задаются доменное имя, порт, путь к файлам, настройки HTTPS и правила обработки запросов.

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

Что такое location

Location используется для задания правил обработки разных URL внутри сайта.

Например, запросы к статическим файлам могут обслуживаться непосредственно с диска, запросы к API — передаваться отдельному backend, а административный раздел — иметь дополнительные ограничения доступа.

Благодаря location один домен можно связать сразу с несколькими внутренними приложениями и сервисами.

Маршрутизация по домену

Один Nginx может обслуживать несколько доменов и направлять каждый из них в отдельное приложение.

Например, на одном сервере работают основной сайт, API и панель управления. Внешне они доступны по разным доменным именам, но все запросы поступают на один Nginx.

Он анализирует имя хоста и выбирает нужный набор правил. Это позволяет эффективно использовать один внешний IP-адрес для нескольких сервисов.

Кэширование в Nginx

Nginx может сохранять ответы внутренних серверов и повторно использовать их для следующих запросов.

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

Кэширование уменьшает нагрузку на backend и ускоряет отдачу контента.

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

Nginx и gzip

Перед отправкой текстовых файлов браузеру сервер может сжимать их. Это уменьшает объем передаваемых данных и ускоряет загрузку страниц при медленном соединении.

Nginx поддерживает HTTP-сжатие и может применять его к HTML, CSS, JavaScript и другим подходящим типам контента.

При этом дополнительное сжатие уже сжатых форматов, например некоторых изображений и архивов, обычно не дает существенной пользы.

Nginx и HTTP-заголовки

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

Например, при работе Reverse Proxy внутреннему приложению необходимо знать исходный адрес пользователя и протокол соединения. Для этого Nginx передает соответствующую информацию в заголовках.

Важно правильно определить, каким заголовкам приложение может доверять. В противном случае внешние пользователи могут попытаться передать поддельные значения.

Логи Nginx

Nginx ведет журналы запросов и ошибок. Они являются важным источником информации для администраторов и разработчиков.

Тип журналаЧто содержит
Access LogИнформацию о запросах пользователей и ответах сервера
Error LogОшибки Nginx и проблемы при обработке запросов

В журнале доступа могут сохраняться IP-адрес, время запроса, URL, HTTP-метод, код ответа, объем переданных данных и другая техническая информация.

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

Коды ошибок Nginx

При проблемах пользователи могут видеть HTTP-коды ошибок. Некоторые из них связаны не с самим Nginx, а с внутренними приложениями.

КодЧто обычно означает
403Доступ к ресурсу запрещен
404Запрошенный ресурс не найден
413Размер запроса превышает установленный лимит
429Слишком много запросов
500Внутренняя ошибка сервера
502Проблема при получении ответа от backend
503Сервис временно недоступен
504Backend не ответил за установленное время

Например, ошибка 502 Bad Gateway часто возникает, когда Nginx работает как Reverse Proxy, но не может корректно подключиться к внутреннему приложению.

Что означает 502 Bad Gateway

Ошибка 502 означает, что Nginx получил некорректный ответ от сервера, на который передал запрос, или вообще не смог установить необходимое соединение.

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

Поэтому при диагностике 502 необходимо проверять не только Nginx, но и работоспособность внутреннего приложения.

Что означает 504 Gateway Timeout

Ошибка 504 появляется, когда Nginx передал запрос backend-серверу, но не получил ответ за допустимое время.

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

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

Nginx и Rate Limiting

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

Это помогает снижать риск перегрузки приложения и ограничивать чрезмерно активных автоматических клиентов.

Rate Limiting может использоваться для страниц авторизации, API, поисковых форм и других ресурсов, которые требуют защиты от слишком большого количества запросов.

Nginx и безопасность

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

На его уровне можно закрывать определенные URL, ограничивать доступ по IP, устанавливать лимиты на запросы и скрывать внутренние backend-серверы.

  • ограничение доступа к административным разделам;
  • Rate Limiting;
  • ограничение размера запросов;
  • управление HTTPS;
  • фильтрация некоторых HTTP-методов;
  • добавление защитных HTTP-заголовков;
  • скрытие внутренней сетевой архитектуры.

Однако уязвимости приложения, слабые пароли, ошибки авторизации и проблемы базы данных необходимо устранять отдельно.

Nginx и WAF

Web Application Firewall анализирует запросы к веб-приложению и пытается выявлять атаки. Nginx сам по себе не является полноценным WAF, хотя может выполнять базовую фильтрацию.

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

Nginx и Docker

Nginx часто используется в контейнерной инфраструктуре Docker. Он может работать как отдельный контейнер и перенаправлять запросы другим контейнерам с приложениями.

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

Такая схема позволяет не публиковать напрямую каждый внутренний контейнер.

Nginx и Kubernetes

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

Они принимают запросы пользователей и направляют их сервисам внутри Kubernetes-кластера в зависимости от домена и URL.

Это позволяет использовать единый внешний вход для множества приложений, работающих в контейнерах.

Nginx и Apache

Nginx и Apache HTTP Server являются популярными веб-серверами, но имеют различную архитектуру и подходы к обработке соединений.

Оба решения могут раздавать сайты, обслуживать HTTPS и работать как Reverse Proxy. Различия проявляются в архитектуре, конфигурации, экосистеме модулей и привычках администраторов.

Иногда Nginx и Apache используются совместно. Например, Nginx принимает внешний трафик и раздает статические файлы, а динамические запросы передает Apache.

Nginx и HAProxy

HAProxy специализируется на проксировании и балансировке нагрузки. Nginx сочетает возможности веб-сервера, Reverse Proxy и балансировщика.

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

Выбор зависит от архитектуры, нагрузки и компетенций команды.

Nginx и CDN

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

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

Таким образом, CDN и Nginx часто используются совместно, а не заменяют друг друга.

Преимущества Nginx

  • высокая эффективность при большом количестве соединений;
  • быстрая раздача статических файлов;
  • возможность работать как Reverse Proxy;
  • поддержка балансировки нагрузки;
  • централизованное управление HTTPS;
  • возможности кэширования;
  • гибкая маршрутизация запросов;
  • поддержка множества сайтов на одном сервере;
  • широкое применение в современной веб-инфраструктуре.

Недостатки и риски Nginx

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

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

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

Отказоустойчивость Nginx

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

Для повышения надежности можно использовать несколько прокси-узлов и механизмы переключения трафика.

Также важно резервировать DNS, сетевые соединения, сертификаты и другие компоненты, от которых зависит внешний доступ.

Мониторинг Nginx

В рабочей среде необходимо контролировать не только факт запуска процесса, но и реальные показатели.

  • количество активных соединений;
  • скорость запросов;
  • долю ошибок 4xx и 5xx;
  • время ответа;
  • нагрузку на процессор и память;
  • состояние backend-серверов;
  • свободное место для логов;
  • срок действия TLS-сертификатов.

Резкий рост ошибок 502 или 504 может указывать на проблемы во внутренних приложениях, а не на неисправность самого Nginx.

Типичные ошибки при настройке Nginx

  1. Изменять конфигурацию без предварительной проверки синтаксиса.
  2. Не создавать резервную копию рабочей конфигурации.
  3. Неправильно передавать адрес клиента backend-приложению.
  4. Оставлять административные интерфейсы доступными из интернета.
  5. Кэшировать персональные данные.
  6. Не ограничивать максимальный размер загружаемых файлов там, где это необходимо.
  7. Использовать слишком большие или слишком маленькие таймауты без анализа.
  8. Не следить за сроком действия сертификатов.
  9. Не настраивать ротацию логов.
  10. Использовать один Nginx без резервирования в критичной инфраструктуре.

Практический пример

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

Перед приложением установили Nginx. Статические файлы он начал обслуживать самостоятельно, а динамические запросы передавать backend-серверу.

Позже компания добавила второй экземпляр приложения. Nginx стал распределять запросы между двумя backend-серверами. HTTPS-сертификат при этом остался настроен только на внешнем прокси.

После дальнейшего роста часть ответов каталога начали кэшировать. Это уменьшило количество обращений к приложению и базе данных.

В результате один компонент стал выполнять несколько инфраструктурных функций: принимать внешний трафик, обслуживать статику, управлять HTTPS, кэшировать данные и балансировать нагрузку.

Когда бизнесу нужен Nginx

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

  • нужно разместить сайт на собственном сервере;
  • необходимо настроить Reverse Proxy;
  • за одним доменом работает несколько приложений;
  • требуется балансировка между backend-серверами;
  • нужно централизованно управлять HTTPS;
  • необходимо ускорить раздачу статического контента;
  • используются Docker или Kubernetes;
  • нужно ограничивать частоту отдельных запросов.

Когда Nginx может быть не нужен

Если компания использует только готовые SaaS-сервисы, самостоятельно настраивать Nginx обычно не требуется. Эту инфраструктуру обслуживает поставщик приложения.

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

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

Связанные термины

ТерминСвязь с Nginx
Веб-серверОдна из основных ролей Nginx
Reverse ProxyРежим, в котором Nginx передает запросы внутренним серверам
Load BalancerФункция распределения запросов между несколькими backend-серверами
BackendВнутреннее приложение, которому Nginx передает запрос
HTTPSЗащищенный протокол, соединения которого может обслуживать Nginx
TLSКриптографический протокол защиты соединения
КэшированиеСохранение ответов для повторной выдачи без обращения к приложению
Rate LimitingОграничение количества запросов
HAProxyАльтернативное решение для проксирования и балансировки
ApacheДругой популярный веб-сервер
CDNРаспределенная система доставки контента, которая может работать перед Nginx
DockerКонтейнерная платформа, где Nginx часто используется как внешний прокси

Краткий итог

Nginx — высокопроизводительный веб-сервер и универсальный компонент для управления HTTP- и HTTPS-трафиком. Он может раздавать статические файлы, работать как Reverse Proxy, балансировать нагрузку, кэшировать ответы и централизованно обслуживать TLS-сертификаты.

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

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

Частые вопросы

6 вопросов
Что такое Nginx?

Nginx — высокопроизводительный веб-сервер, который также может работать как Reverse Proxy, балансировщик нагрузки, HTTP-кэш и точка обработки HTTPS-соединений.

Для чего нужен Nginx?

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

Чем Nginx отличается от Reverse Proxy?

Reverse Proxy — это функция или архитектурная роль, а Nginx — конкретное программное решение. Nginx может работать как Reverse Proxy, но также выполнять функции обычного веб-сервера, балансировщика и кэша.

Что означает ошибка 502 в Nginx?

Ошибка 502 Bad Gateway обычно означает, что Nginx не смог получить корректный ответ от внутреннего backend-сервера. Причиной может быть остановка приложения, неверный адрес, закрытый порт или проблема сети.

Можно ли использовать Nginx с PHP?

Да. Nginx часто используется с PHP-FPM. Nginx принимает HTTP-запрос, передает PHP-скрипт обработчику PHP-FPM, получает результат выполнения и возвращает его пользователю.

Чем Nginx отличается от Apache?

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

Была ли статья полезна?
Документ обновляется командой EFSOL. Свяжитесь с нами, если нашли неточность.
Нужна консультация?

Поможем спроектировать, развернуть и сопроводить облачную или гибридную инфраструктуру под задачи вашего бизнеса.

Ответим в течение часа в рабочее время
Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.