К содержанию

Wiki · Технологии разработки

Nginx

Nginx («энджин-икс») – это веб-сервер и обратный прокси с открытым кодом. Он принимает запросы посетителей, сам отдаёт картинки, стили и скрипты, а запросы к страницам передаёт программе, которая их собирает: PHP, Apache или приложению на другом языке.

Владелец сайта чаще всего встречает это слово на белой странице с надписью «502 Bad Gateway» и строкой «nginx» внизу. Отсюда частый вывод, что сломался nginx. Обычно наоборот: nginx исправен и честно сообщает, что программа за ним не ответила.

Nginx написал Игорь Сысоев, сейчас по документации nginx.org он распространяется под двухпунктовой лицензией BSD. С 2019 года коммерческие версии и поддержку развивает компания F5, которая купила NGINX, Inc. В России есть и совместимый форк Angie: его делают выходцы из команды nginx, продукты компании включены в реестр отечественного ПО.

Зачем nginx ставят перед Apache и PHP-FPM

У сайта на PHP два вида работы. Отдать готовый файл (фото товара, CSS) просто и быстро. Собрать страницу каталога дольше: нужно выполнить PHP-код и сходить в базу. Nginx берёт на себя первое и тысячи одновременных соединений, а второе передаёт дальше. Такую роль называют обратным прокси.

Схем на практике две.

  • Nginx + Apache. Nginx отдаёт статику, Apache выполняет PHP и читает файлы .htaccess. Так устроено и официальное «1С-Битрикс: Веб-окружение» для Linux: в его составе есть и nginx, и Apache.
  • Nginx + PHP-FPM. Apache нет, nginx передаёт PHP-запросы напрямую пулу процессов PHP-FPM. Схема легче, но правила из .htaccess здесь не работают, их переписывают в конфигурацию nginx.
Схема работы nginx: обратный прокси перед Apache или PHP-FPM, статические файлы nginx отдаёт посетителю сам
Как nginx делит работу с Apache и PHP-FPM

Откуда берутся 502 и 504 и кто их чинит

Обе ошибки nginx отдаёт, когда программа за ним подвела. Разница в том, как именно.

КодЧто произошлоЧастые причины
502 Bad GatewayPHP-FPM или Apache не ответил вовсе или ответил некорректнопроцесс PHP упал или перезапускается, кончились свободные процессы, после переезда неверный адрес бэкенда
504 Gateway Timeoutответ не пришёл за отведённое времятяжёлый отчёт, обмен с 1С, медленный запрос к базе

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

Первым делом разработчик смотрит журнал ошибок nginx (на Linux обычно /var/log/nginx/error.log): там написано, к какому адресу nginx не смог достучаться и почему.

HTTPS, редиректы и кеш на стороне nginx

В конфигурации nginx подключают SSL-сертификат, и сайт начинает работать по HTTPS. Там же удобно прописать 301 редирект с http на https и с www на домен без www, чтобы запрос не доходил до PHP:

server {
    listen 80;
    server_name example.ru www.example.ru;
    return 301 https://example.ru$request_uri;
}

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

Чек-лист настроек nginx: HTTPS и сертификат, редиректы, склейка www, отдача статики, кеш ответов и таймауты бэкенда
Что обычно настраивают в nginx

Что владельцу сайта знать про свой nginx

  • На виртуальном хостинге конфигурацию nginx обычно настраивает хостинг, вы меняете её через панель или поддержку. На VPS она полностью на вашем подрядчике.
  • Перенося сайт с Apache на чистый nginx, проверьте редиректы и правила из .htaccess: при переезде они чаще всего теряются.
  • Версию nginx обновляют вместе с системой: в старых версиях находят уязвимости.
  • Не отключайте вывод ошибок «чтобы не пугать посетителей». Ошибка от этого не исчезнет, а найти её станет сложнее.

Узнать, стоит ли на сайте nginx, можно по заголовку ответа Server в инструментах разработчика браузера, если его не скрыли. Но точнее спросить подрядчика или хостинг. В проектах с Kubernetes nginx может работать Ingress-контроллером, то есть принимает весь внешний трафик кластера.

Nginx на сайте: ошибки 502 и 504, Apache, HTTPS и настройки

Почему внизу страницы с ошибкой написано nginx?

Подпись nginx показывает, какой веб-сервер выдал страницу ошибки, а не кто виноват. Nginx принимает запрос первым и, если PHP или Apache за ним не отвечает, сам формирует страницу с кодом и ставит свою подпись.

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

Nginx рассчитан на множество одновременных соединений и быструю отдачу файлов, а Apache гибко настраивается через файлы .htaccess прямо в папках сайта. Поэтому их часто ставят вместе: nginx впереди, Apache за ним выполняет PHP.

Как увеличить таймаут в nginx при ошибке 504?

Таймаут ожидания ответа задают параметрами proxy_read_timeout для Apache или fastcgi_read_timeout для PHP-FPM в конфигурации сайта, после чего перезагружают nginx. Но сначала выясните, почему страница отвечает так долго. Увеличенный таймаут прячет медленный запрос, а посетитель всё равно ждёт.

Где лежат настройки nginx на сервере?

На большинстве Linux-серверов основной файл настроек nginx находится в /etc/nginx/nginx.conf, а настройки отдельных сайтов в папках /etc/nginx/conf.d или sites-enabled. После правки конфигурацию проверяют командой nginx -t и только потом перезагружают.

Как работает .htaccess, если на сервере только nginx?

Никак: nginx файлы .htaccess не читает. Редиректы, запреты доступа и правила ЧПУ из них переносят в конфигурацию nginx вручную, иначе после переезда часть адресов начнёт отдавать 404 или потеряет редиректы.

Сколько стоит nginx?

Открытая версия nginx бесплатна и распространяется по лицензии BSD. Платные варианты с расширенным балансированием, мониторингом и поддержкой продаёт F5, в России есть совместимые коммерческие версии Angie. Обычному сайту хватает открытой версии.

Что делать, если nginx отдаёт старую версию страницы?

Если nginx показывает старую страницу после правок, скорее всего, включено кеширование ответов на сервере или стоит кеш в CDN. Сбросьте кеш nginx, проверьте страницу в окне инкогнито и уточните у разработчика, для каких разделов включён кеш и на какой срок.

Когда сайту нужен nginx без Apache?

Связка nginx и PHP-FPM без Apache подходит, когда сайту не нужны правила из .htaccess и важна экономия памяти сервера: так обычно работают новые проекты на фреймворках. Сайту на CMS, который годами жил на .htaccess, переход без Apache требует аккуратного переноса правил.

Если сайт отдаёт 502 или 504, а хостинг кивает на разработчика, разберём конфигурацию nginx, PHP и базы на технической поддержке. Настройки сервера, редиректы и HTTPS проверяем и в ходе услуги Технический аудит сайта.

Документация nginx и «1С-Битрикс»

  • nginx.org: главная страница проекта, документация модуля ngx_http_proxy_module
  • F5: пресс-релиз «F5 Completes Acquisition of NGINX»
  • Учебный курс «1С-Битрикс»: состав «1С-Битрикс: Веб-окружение»
  • Angie Software: официальный сайт

См. также: Коды ответов сервера, Linux, SSL-сертификат.

Остались вопросы по теме «Nginx»?

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

Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

Посчитайте стоимость проекта за 2 минуты

Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.