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

Что такое Nginx

Nginx (NGINX, Engine-X, Энжин-кс) - это бесплатный веб- и почтовый прокси-сервер с непоточной (асинхронной) архитектурой и открытым кодом.

Разработку Nginx начал в 2002 году Игорь Сысоев для Rambler. А в 2004 году он стал доступен широкому кругу пользователей. С 2011 года серверное ПО начала выпускать уже собственная фирма Игоря, которая спустя 2 года запустила расширенную платную версию продукта (Nginx Plus). Весной 2019 года Nginx была выкуплена крупным американским девелопером F5 Networks.

Nginx работает на ОС Unix-типа и был успешно протестирован на OpenBSD, FreeBSD, Linux, Mac OS X, Solaris. На ОС Windows он стал доступен после выпуска бинарной сборки 0,7.52.

На данный момент функционалом пользуются такие известные платформы: Rambler, Begun, Yandex, SourceForge.net, WordPress.com, Vkontakte.ru. Статистика показывает, что Nginx используют 22,3 млн веб-сайтов и 2,03 млн дополнительных активных сайтов.

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

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

Практическое применение

  • Отдельный порт/IP. При наличии большого количества статичного контента или файлов для загрузки, можно настроить на отдельном порту или IP, чтобы осуществлять раздачу. При большом количестве запросов рекомендуется ставить отдельный сервер и подключать к нему Nginx.
  • Акселерированное проксирование. В таком случае все пользовательские запросы на статичный контент (картинки, простой HTML, JavaScript, CSS-файлы) поступают сначала на Nginx, а он их обрабатывает самостоятельно. При этом никаких изменений исходного кода не требуется.
  • Nginx и FastCGI. Если поддерживается технология FastCGI, Apache вообще можно не использовать. Но в таком случае может потребоваться модификация кодов скриптов.

Nginx vs Apache

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

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

Сильные и слабые стороны

  • Оба сервера хорошо работают на системах типа Unix, но производительность Nginx на Windows заметно ниже.
  • При одновременной работе Nginx оказывается в два раза быстрее Apache и использует меньше памяти. С динамическим контентом скорость равна.
  • Для получения пользовательской поддержки можно обратиться на форум или почту компании, но у Apache Foundation есть с этим проблемы.
  • Apache хорошо справляется с хостингом нескольких сайтов сразу, но Nginx показывает лучшую гибкость и эффективность работы с динамическим контентом.

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

Установка на Linux возможна двумя способами - из предварительно собранного бинарного файла (пакета) или с помощью исходного кода.

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

Установка Nginx на Windows возможна с помощью интерфейса Win32 API. Однако, такой вариант будет гораздо менее эффективен, даже в серверных версиях и не может быть рекомендован для широкого применения.

Установка из предварительно собранного файла

Необходимо воспользоваться командой:

sudo apt-get update
sudo apt-get install nginx

Чтобы проверить, все ли прошло нормально, можно ввести команду, которая покажет установленную версию:

sudo nginx -v

Для конфигурации Nginx задействуется директория /etc/nginx/. При дальнейшей работе с сервером важны файл nginx.conf и папка sites-available.

Основные настройки в файле nginx.conf. Благодаря этому файлу, все параметры можно настроить по своему усмотрению. Работать можно и с настройками по умолчанию.

Важные элементы конфигурации

  • worker_processes - количество рабочих процессов, которые будет использовать сервер. Число должно соответствовать количеству ядер процессора.
  • worker_connections - это максимальное количество подключений каждого рабочего процесса. Чем выше показатель, тем больше человек обслуживается одновременно.
  • access_log & error_log - эти файлы используются для регистрации любой ошибки и попыток получения доступа. Журналы изучаются для устранения неполадок.
  • gzip - это настройки для "сжатия" запросов Nginx. Включение параметра позволит повысить производительность. По умолчанию поднастройки закомментированы.
  • gzip_comp_level - уровень сжатия от 1 до 10. Этот показатель обычно не превышает 6.
  • gzip_types - это перечень типов ответов, к которым применяется сжатие.

Сервер может обслуживать множество сайтов. Файлы, которые определяют какие именно, находятся в директории /etc/nginx/sites-available. Чтобы Nginx работал с сайтами, их необходимо слинковать с /etc/nginx/sites-enabled. Использования метода линкования позволяет быстро запускать сайты, не удаляя никакие файлы после их использования. Помимо этого, можно просто скопировать файлы прямо в первую директорию.

Символьная ссылка - это путь к файлу. Общий синтаксис для неё выглядит так:

ln -s <на какой существующий объект будет вести> <создаваемый симлинк>

Директория sites-available содержит конфигурацию виртуальных хостов. Это позволяет веб-серверу настраиваться для множества сайтов с разной конфигурацией. Сайты в этой директории не задействуются и будут обслуживаться только, если сделать символьную ссылку на папку sites-enabled.

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

Root-каталог Nginx по умолчанию находится в директории /usr/share/nginx/html. Все файлы, которые размещаются в нем, автоматически обслуживаются веб-сервером. Место определяется файлом конфигурации, который можно найти в /etc/nginx/conf.d/default.conf.

Новые блоки server создаются через конфигурационные файлы в /etc/nginx/conf.d. Они буду загружаться при запуске Nginx, если заканчиваются на .conf.

Основной конфигурационный файл сервера находится в /etc/nginx/nginx.conf. Через него изменяются любые настройки.