Программирование  •  06 июня 2022  •  5 мин чтения

Веб-сервер Nginx и что о нём должен знать каждый разработчик

Для работы любого сайта нужен веб-сервер — специальная программа, которая принимает запросы пользователей, обрабатывает их и отправляет обратно ответ. Один из самых популярных сегодня веб-серверов — Nginx.
Игорь Коровченко
Проект ««Дока»»
Разработчик, devops и автор
Лена Шпрингер
Яндекс Практикум
Редактор

Что такое Nginx

Любой сайт — это набор файлов. Они хранятся в интернете, на компьютере и пересылаются пользователю, когда он открывает этот сайт. Для этого на компьютере работает специальное ПО — веб-сервер.

Схема работы веб-сервера в общих чертах выглядит так:

Здесь клиенты — это пользователи. Например, люди, которые открыли сайт в браузере. HTTP-запрос — это текстовый запрос специального формата, с помощью которого сервер «понимает», что нужно пользователю. А HTTP-ответ содержит уже саму страницу со всей нужной информацией.

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

Веб-сервер — это общее название для ряда программ. Так же как существуют разные браузеры, существуют разные веб-серверы: Apache, IIS, lighttpd, Google Web Server и другие. Но сейчас, в 2022 году, наибольшей популярностью пользуется веб-сервер Nginx.

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

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

Сервер Nginx умеет делать две вещи:

Самостоятельно принимать, обрабатывать и отдавать клиентам запросы.

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

Выступать в качестве прокси-сервера.

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

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

Применение Nginx и отличия от Apache

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

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

Nginx превосходит Apache в работе со статическим контентом — тем, который одинаков для всех пользователей. Странички товаров, лендинги, блоги, информационные сайты — всё это статический контент. Его в интернете гораздо больше, чем динамического. И именно поэтому стандартом стал сервер Nginx, который работает с таким контентом гораздо быстрее и эффективнее.

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

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

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

Установка Nginx зависит от того, какую ОС вы используете. Чаще всего веб-сервер устанавливают на Linux. Есть стандартные пакеты и инструкции для наиболее популярных дистрибутивов прямо на сайте Nginx. Всё на русском языке.

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

Конфигурация и настройка сервера Nginx

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

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

  
	
listen 8080;
        
означает, что сервер будет прослушивать порт 8080 для ожидания сообщений от клиентов.

Сложная директива может включать в себя несколько простых:

  
	
server {
  listen 8080;
  root /data/up1;
  location / {
  }
}
        
Здесь описано поведение Nginx: он прослушивает порт 8080 и отдаёт статические файлы из data при обращении к корневой странице сайта. Внутри фигурных скобок директивы становятся зависимыми от контекста. Контекст location / означает, что директивы внутри фигурных скобок описывают действия сервера при обращении к корневой директории сайта.

В конфигурации можно описать перенаправление запросов:

  
	
server {
  location / {
    proxy_pass http://localhost:8080;
  }

  location /images/ {
    root /data;
  }
}
        
Добавить фильтр по типу файлов:
  
	
location ~ \.(gif|jpg|png)$ {
  root /data/images;
}
        
И прописать передачу запросов интерпретатору:
  
	
server {
  location / {
    fastcgi_pass  localhost:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;
  }

  location ~ \.(gif|jpg|png)$ {
    root /data/images;
  }
}
        
У веб-сервера Nginx много настроек. На курсе Яндекс Практикума «Python-разработчик» мы разбираем основные и учим студентов конфигурировать веб-сервер для работы.
Когда конфигурация написана, её можно протестировать консольной командой:
  
	
nginx -t 
        
Nginx прямо в консоль сообщит, всё ли правильно и есть ли ошибки.

Также сервером Nginx можно управлять через консоль сигналами:

● stop — быстро завершить;

● quit — плавно завершить;

● reload — перезагрузить конфигурационный файл;

● reopen — открыть лог-файлы заново.

Для этого нужно написать в консоль команду, например:

  
	
nginx -s stop 
        
Чтобы не настраивать конфигурацию с нуля, можно получить готовый конфигурационный файл из сервиса Mozilla SSL Configuration Generator. С таким файлом можно поэкспериментировать: изменять параметры, добавлять свои данные, смотреть на стандартные решения и анализировать ошибки.

Запуск

Когда веб-сервер Nginx настроен, можно его запускать. Для этого есть консольная команда:
  
	
sudo systemctl start nginx 
        
Для остановки есть своя команда:
  
	
sudo systemctl stop nginx
        
Для перезапуска после изменения конфигурации Nginx — ещё одна команда:
  
	
sudo systemctl reload nginx
        
Также запустить сервер Nginx можно через исполняемый файл, как любое другое ПО.

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

Поделиться 
Tue Sep 20 2022 19:47:00 GMT+0300 (Moscow Standard Time)