Remontnouta.ru

ПК Ремонт техники
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Веб сервер nginx что это

Веб сервер nginx что это

Nginx — это веб-сервер, в котором используется архитектура «Master-Slave». В nginx имеются обратный прокси-сервер, балансировщик нагрузки, почтовый прокси-сервер и HTTP-кеш.

Определение это сложное, полное специальных терминов. Если вы тоже так думаете — значит, эта статья написана специально для вас. Сначала мы разберёмся с основными концепциями и понятиями nginx, а потом поговорим о том, как его устанавливать и настраивать.

Для того чтобы вам было легче — просто помните о том, что nginx — это отличный веб-сервер.

Веб-сервер, если описать его простыми словами, это нечто вроде посредника. Предположим, вам нужно посетить сайт dev.to. Вы вводите а адресной строке браузера следующее: dev.to. Браузер (клиент) находит адрес веб-сервера, а затем делается запрос к бэкенд-серверу, который возвращает клиенту ответ.

Как обрабатываются HTTP-запросы в Plesk с nginx

Чтобы обеспечить интеграцию между nginx и Apache, Plesk использует два дополнительных модуля Apache:

  • mod_aclr2. Этот модуль устанавливает обработчик, который запускается после обработчиков всех остальных модулей Apache (mod_rewrite; модулей, связанных с .htaccess ; mod_php и т.д.). Таким образом, в случае запроса динамического контента модуль mod_aclr2 никогда его не получит, так как этот запрос будет выполнен вышестоящими обработчиками соответствующих модулей Apache (mod_php, mod_perl, mod_cgi и т.д.). Единственным исключением являются запросы SSI: как только они доходят до модуля mod_aclr2, он перенаправляет их соответствующим обработчикам. Если запрашивается статический файл, mod_aclr2 находит точное расположение файла в файловой системе и сообщает его nginx.
  • mod_rpaf или mod_remoteip С точки зрения Apache все клиенты имеют один и тот же IP-адрес – адрес сервера nginx (см. схему выше). Это создает проблемы для сайтов и веб-приложений, использующих IP-адреса клиентов для идентификации, сбора статистики и так далее. Модуль mod_rpaf (в Apache 2.2) или mod_remoteip (в Apache 2.4) решает эту проблему, заменяя IP-адрес сервера nginx на IP-адреса клиентов во всех запросах. Если подробнее, то этот модуль использует специальный заголовок X-Forwarded-For, в который nginx помещает IP-адрес клиента.

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

Читайте так же:
Видеокарта palit geforce gtx 1070 super jetstream

Обработка HTTP-запроса статического файла происходит следующим образом (см. схему):

  1. Клиент отправляет запрос веб-серверу.
  2. Nginx добавляет в этот запрос заголовки X-Accel-Internal (используется модулем mod_aclr2) и X-Forwarded-For (содержит IP-адрес клиента) и отправляет его Apache.
  3. Apache получает запрос и пропускает его через зарегистрированные обработчики (применяет конфигурацию .htaccess , перезаписывает URL и т.д.). На этом этапе модуль mod_rpaf заменяет IP-адрес сервера nginx в переменной Apache REMOTE_ADDR на адрес клиента из заголовка X-Forwarded-For.
  4. После прохождения через все зарегистрированные обработчики запрос попадает в модуль mod_aclr2. Обработчик проверяет наличие заголовка X-Accel-Internal. Если он есть, модуль отправляет серверу nginx ответ с заголовком X-Accel-Redirect и пустым содержимым. Этот заголовок содержит точное расположение файла, определенное модулем mod_aclr2.
  5. Получив ответ, сервер nginx находит соответствующий файл и передает его клиенту.

На расположенной ниже схеме приведен пример обработки запроса файла GIF размером 2 КБ.

image 71008

В случае с динамическим контентом шаги с первого по третий будут такими же. Затем запрос передается обработчику соответствующего модуля Apache (mod_php, mod_perl, mod_cgi и т.д.). Запрос никогда не доходит до модуля mod_aclr2 (за исключением запросов SSI). Обработчик формирует ответ и отправляет его nginx, который в свою очередь доставляет его клиенту. На следующей схеме приведен пример обработки запроса файла PHP.

image 71009

Конфигурации для разных случаев использования

NGINX обычно используется в трёх случаях:

  • в качестве reverse proxy для проксирования запросов в бекэнд,
  • как балансировщик запросов между серверами бекэнда,
  • для отдачи статического контента.

Начнём с конфигурации для отдачи статики. Создаём контекст server, указываем, какой порт слушать, задаём имя сервера и описываем три контекста location. Первый контекст — на все ресурсы, второй и третий контексты определяют директорию поиска файлов в зависимости от их расширения.

Чтобы сделать reverse proxy, создаём такой же контекст server. В нём создаём один контекст location, в котором указываем директиву proxy_pass и URL, куда проксировать запросы. Теперь NGINX будет проксировать все запросы на указанный URL.

Добавим балансировку в конфигурацию reverse proxy. Внутри контекста http создаём контекст upstream и указываем адреса наших приложений. Внутри контекста location указываем директиву proxy_pass со значением имени контекста upstream. Теперь NGINX будет распределять запросы по двум серверам.

Читайте так же:
Изображение выходит за рамки монитора

Стратегия балансировки по умолчанию является round-robin — равномерным распределением. Можно указать стратегию least_conn, при которой NGINX будет отправлять запросы серверу, у которого меньше активных подключений. Это полезно, если серверы не одинаковые по своей мощности.

Apache vs Nginx: выбираем оптимальный веб-сервер

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

История создания

Apache был создан в далеком 1995 году, а уже через год стал самым популярным веб-сервером в мире. Основной идеей разработчика Роберта Маккула было создать гибкое и мощное ПО, которое хорошо интегрируется с другим софтом. Так и вышло – большинство сисдаминов выбирают именно динамичный Аpache, который можно дополнять функциональными модулями.

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

Принцип работы

Аpache в ответ на каждый пользовательский запрос создает отдельный процесс или поток. Технология очень проста в реализации, но абсолютно не подходит для многозадачных проектов. Любой процесс «съедает» память и ресурсы системы, и ладно, если процессов мало. А если их сто, тысяча, миллион? Все-таки Аpache создан для не очень больших проектов с низким уровнем загруженности.

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

Выдача контента

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

Читайте так же:
Кабель для юсб модема

Nginx выдает только статический контент, а вот динамику генерировать не умеет. Но, как вариант, его можно использовать в связке с Apache, PHP-PFM и любым другим web-приложением такими как Python (Django), Ruby on Rails, nodejs и другими.

Возможности конфигурирования

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

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

Наличие модулей

На данный момент у Аpache имеется 60 официальных модулей и еще больше любительских. Модули не требуют сборки, их можно сразу загружать в ленту.

У Nginx существует 130 официальных модулей, но все они требуют сборки. Такой подход более сложный, но зато и более безопасный.

Поддержка ОС

Аpache поддерживает все Unix-подобные ОС и всю линейку Windows, включая последние обновления.

Nginx поддерживает большинство Unix-подобных ОС и частично Windows.

Немного статистики

  • Аpache обслуживает около 69 миллионов веб-сайтов, Nginx – почти 44 миллиона.
  • Аpache идеально подходит для использования в 229 категориях веб-сайтов, включая «бизнес и промышленность», «искусство и развлечения», «торговля», «интернет и телекоммуникации». Nginx лидирует в 9 категориях, в том числе «человек и общество», «религия и духовность», «юмор», «форумы и чаты».
  • Аpache – основной веб-сервер в 207 странах мира, включая США, Японию, Германию и Францию. Nginx предпочитают в 10 странах, в том числе Украине, Китае, Индонезии и России.

И Apache, и Nginx – высоконадежное и безопасное ПО, пользующееся популярностью во всем мире. Делая выбор между ними, отталкивайтесь от загруженности проекта и требований к обработке HTTP-запросов. И не забывайте, что веб-серверы могут работать и в связке – так вы сможете использовать преимущества обеих систем.

Читайте так же:
Геопоиск теле2 с компьютера без согласия

nginx

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

В этой конфигурации, чтобы определить, какому серверу следует направить запрос, nginx проверяет только поле “Host” заголовка запроса. Если его значение не соответствует ни одному из имён серверов или в заголовке запроса нет этого поля вовсе, nginx направит запрос в сервер по умолчанию для этого порта. В вышеприведённой конфигурации сервером по умолчанию будет первый сервер, что соответствует стандартному поведению nginx по умолчанию. Сервер по умолчанию можно задать явно с помощью параметра default_server в директиве listen:

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

Как предотвратить обработку запросов без имени сервера

Если запросы без поля “Host” в заголовке не должны обрабатываться, можно определить сервер, который будет их отклонять:

Здесь в качестве имени сервера указана пустая строка, которая соответствует запросам без поля “Host” в заголовке, и возвращается специальный для nginx код 444, который закрывает соединение.

Определение виртуального сервера по имени и IP-адресу

Рассмотрим более сложную конфигурацию, в которой некоторые виртуальные серверы слушают на разных адресах:

В этой конфигурации nginx вначале сопоставляет IP-адрес и порт запроса с директивами listen в блоках server. Затем он сопоставляет значение поля “Host” заголовка запроса с директивами server_name в блоках server, которые соответствуют IP-адресу и порту. Если имя сервера не найдено, запрос будет обработан в сервере по умолчанию. Например, запрос www.example.com , пришедший на порт 192.168.1.1:80, будет обработан сервером по умолчанию для порта 192.168.1.1:80, т.е. первым сервером, т.к. для этого порта www.example.com не указан в списке имён серверов.

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

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

Теперь посмотрим на то, как nginx выбирает location для обработки запроса на примере обычного простого PHP-сайта:

Читайте так же:
Вирус который перезагружает компьютер

nginx вначале ищет среди всех префиксных location’ов, заданных строками, максимально совпадающий. В вышеприведённой конфигурации указан только один префиксный location “ / ”, и поскольку он подходит под любой запрос, он и будет использован, если других совпадений не будет найдено. Затем nginx проверяет location’ы, заданные регулярными выражениями, в порядке их следования в конфигурационном файле. При первом же совпадении поиск прекращается и nginx использует совпавший location. Если запросу не соответствует ни одно из регулярных выражений, nginx использует максимально совпавший префиксный location, найденный ранее.

Следует иметь в виду, что location’ы всех типов сопоставляются только с URI-частью строки запроса без аргументов. Так делается потому, что аргументы в строке запроса могут быть заданы различными способами, например:

Кроме того, в строке запроса можно запросить что угодно:

Теперь посмотрим, как бы обрабатывались запросы в вышеприведённой конфигурации:

Функционал

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

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

Заключение

Что такое Nginx

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

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

Чтобы Nginx, Apache и другой сложный «софт» работал, как швейцарские часы, разверните их на виртуальном сервере от Eternalhost! Это мощный и надёжный инструмент для самых неординарных задач в области IT.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector