Nginx - что это и для чего нужен

Администрирование

Nginx - что это и для чего нужен

Все о веб-сервере nginx: для чего он нужен, как работает. Boodet.online.

Поделиться
Запинить
Отправить

Что такое Nginx

Nginx — это один из самых распространенных в мире веб-серверов с открытым исходным кодом. Справляется с высокими рабочими нагрузками и отлично работает с разным ПО для полного обеспечения web-стека. Nginx можно также использовать для обратного прокси-сервера, HTTP-кэша и балансировщика нагрузки.

Nginx появился в 2004 году, его разработал Игорь Сысоев, причем изначально это был ответ на проблему C10K (одновременное подключение более 10 тысяч пользователей). Серверы того времени не выдерживали такую нагрузку, производительность падала, а время простоя увеличивалось.

Решая в первую очередь задачи производительности, продукт стал популярнее других web-серверов: он лучше справлялся со статическим контентом и высокими параллельными запросами.

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

Чтобы понять, как это работает, необходимо знать принципы асинхронности и параллельности процессов. Асинхронность обеспечивает минимальное потребление ресурсов. Параллельность — одновременное выполнение рабочих процессов, без постановки в очередь.

Теория

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

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

На практике

Что это дает на практике:

  • поддержка FastCGI с кешированием;

  • обратный прокси с кешированием;

  • обработка статических файлов, индексных файлов и автоматическая индексация;

  • TLS/SSL с SNI;

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

Nginx или Apache

По данным W3Techs, Nginx занимает второе место среди самых популярных веб-серверов (41,8%). С небольшим отрывом в 2% (43,6%) его опережает Apache, который тоже написан на открытом исходном коде.

При этом Apache, несмотря на свою популярность, реже используется для сайтов с большим трафиком. Если речь идет про максимальное потребление ресурсов, выбирают Nginx (Facebook, WordPress, Netflix, Autodesk, Google, GitLab, IBM, Microsoft, Adobe, Xerox, Intel, Cisco, Twitter, Apple).

Если Nginx так хорошо себя зарекомендовал, то почему некоторые до сих пор выбирают Apache? Во-первых, Apache предустановлен практически во все дистрибутивы подобных Linux ОС: Centos, Ubuntu, Red Hat. Во-вторых, Apache был создан раньше Nginx (1995), поэтому веб-мастера лучше с ним знакомы. На него больше документации, к тому же настраивать Apache очень просто — достаточно зайти в .htaccess. Этот файл может быть размещен на любом уровне в дереве каталогов, что удобно при создании виртуального хостинга — можно настраивать клиентские сайты в рамках одного хостинга, не затрагивая глобальную конфигурацию.

Nginx не работает с .htaccess, но правила из этого файла можно перевести в нужный синтаксис. Это более трудозатратно, но возможно. В отличии от Apache, перевод .htaccess в синтаксис Nginx не снизит потерю производительности (у первого она снижалась, даже если файл не использовали).

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

Плюсы и минусы Nginx

До 2016 года абсолютным минусом считалось отсутствие динамических модулей, но с появлением версии 1.9.11 об этом недостатке можно забыть. Более того, в мае 2019 года производители анонсировали разработки модулей для HTTP/3 и QUIC, а это уже безусловный плюс.

Основные преимущества:

  • быстрое обслуживание статичного контента;

  • динамическое кеширование средствами FastCGI и SCGI, работает со сценариями Python и PHP;

  • не ведет к простоям благодаря экономии ресурсов;

  • применяет стек LEMP;

  • может использоваться совместно с Apache как интерфейсный прокси;

  • хорошо показал себя как обратный прокси-сервер для протоколов HTTP, SMTP, HTTPS, IMAP, POP3;

  • безопасность обеспечивается в том числе небольшой кодовой базой;

  • быстрое обновление конфигурации без простоя.

Главные недостатки:

  • работает не на всех Unix ОС;

  • низкая производительность на Windows;

  • не поддерживает файл конфигурации .htaccess.

Архитектура Nginx

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

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

Установка из файла

Как мы уже писали выше, Nginx не раскрывает и десятой доли своего преимущества в производительности на Windows, поэтому мы рекомендуем ставить его только на подобные Linux ОС или FreeBSD.

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

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

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

После установки нужно будет перезагрузить сервер и настроить конфигурацию. Тут все просто: найдите файл nginx.conf:


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

После внесения всех необходимых настроек перезапустите сервер:


И проверьте, все ли работает:


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

Что еще нужно настроить:

  • виртуальные хосты;

  • Location;

  • Php-fpm;

  • мониторинг;

  • SSL-сертификат;

  • кэширование;

  • переадресацию с http на https;

  • правила перенаправления и rewrite;

  • проксирование запросов;

  • ограничение доступа;

  • связка с Apache (при необходимости);

  • балансировка нагрузки (при необходимости).

Запуск

Для запуска нужно выполнить исполняемый файл:


Чтобы остановить сервер, пропишите:


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

Поделиться
Запинить
Отправить

Возможно вам так же будет интересно:

Что обещать профессионалам, если нет денег

Все говорят, что вашему стартапу нужен логотип, но никто говорит, как его сделать? Эта статья для вас!

Метрики, которые показывают, что ваш landing page помогает вам зарабатывать.

Рассказываем, как оценить проект на каждом этапе развития