DEV Community

Андрей Викулов (VProger)
Андрей Викулов (VProger)

Posted on • Originally published at viku-lov.ru on

Nginx: база и фундамент — как устроен веб-сервер и с чего начинать

Nginx: база и фундамент — как устроен веб-сервер и с чего начинать

Введение

Если ты работаешь с сайтами, API или любым backend-проектом, рано или поздно ты упираешься в Nginx.

Он стоит перед PHP, Python, Node.js, принимает входящий трафик, раздаёт статику, проксирует запросы и часто является первой точкой отказа.

В этой статье мы без магии и абстракций разберём:

  • что такое Nginx и зачем он нужен;
  • как он устроен изнутри;
  • где лежат конфигурации;
  • чем отличаются пути и подходы в разных ОС;
  • как читать конфиги и не бояться их трогать.

Это первая часть серии. Дальше будут:

  • virtual host'ы,
  • PHP-FPM,
  • reverse proxy,
  • HTTPS,
  • оптимизация и отладка.

Что такое Nginx и какую задачу он решает

Nginx — это высокопроизводительный веб-сервер и reverse proxy.

Если упрощать:

  • браузер приходит → Nginx
  • Nginx либо:

  • отдаёт файл (.html, .css, .js, изображения),

  • либо передаёт запрос дальше (PHP-FPM, Python, Node.js).

Почему Nginx, а не Apache

Ключевое отличие — архитектура.

  • Apache: процесс / поток на запрос
  • Nginx: event-driven, один процесс обслуживает тысячи соединений

Результат:

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

Архитектура Nginx простыми словами

Nginx состоит из:

  1. Master-процесса
  • читает конфигурацию;
  • управляет worker'ами;
  • перезапускает их при reload.
  1. Worker-процессов
  • обрабатывают реальные HTTP-запросы;
  • работают асинхронно;
  • не блокируются на каждом соединении.

Client

↓

Nginx (master)

↓

Nginx (worker 1..N)

↓

PHP-FPM / backend / files

Enter fullscreen mode Exit fullscreen mode

Количество worker'ов обычно равно количеству CPU-ядер.


worker\_processes auto;

Enter fullscreen mode Exit fullscreen mode

Где живёт Nginx в файловой системе

Это критически важно, потому что 90% ошибок — «не там правлю».

Linux (Ubuntu / Debian)


/etc/nginx/

├── nginx.conf

├── sites-available/

├── sites-enabled/

├── conf.d/

└── snippets/

Enter fullscreen mode Exit fullscreen mode
  • nginx.conf — основной файл
  • sites-available — конфиги сайтов
  • sites-enabled — активные сайты (через symlink)
  • conf.d — дополнительные конфиги
  • snippets — переиспользуемые куски

Linux (CentOS / Alma / Rocky)


/etc/nginx/

├── nginx.conf

├── conf.d/

└── default.d/

Enter fullscreen mode Exit fullscreen mode

Здесь чаще:

  • нет sites-available;
  • каждый сайт — отдельный файл в conf.d/*.conf.

macOS (через Homebrew)


/usr/local/etc/nginx/

Enter fullscreen mode Exit fullscreen mode

или на Apple Silicon:


/opt/homebrew/etc/nginx/

Enter fullscreen mode Exit fullscreen mode

Windows

Честно: не рекомендую для продакшена.

Используется редко, структура нестабильна, отладка боль.


Главный файл nginx.conf

Пример минимального nginx.conf:


user www-data;

worker\_processes auto;

events {

worker\_connections 1024;

}

http {

include mime.types;

default\_type application/octet-stream;

sendfile on;

keepalive\_timeout 65;

include /etc/nginx/conf.d/\*.conf;

}

Enter fullscreen mode Exit fullscreen mode

Что здесь важно

  • events — сетевые параметры
  • http — всё, что связано с HTTP
  • include — подключение сайтов и конфигов

👉 90% твоей работы будет внутри http и server


Server block — виртуальный хост

Аналог VirtualHost в Apache.


server {

listen 80;

server\_name example.com www.example.com;

root /var/www/example.com/public;

index index.html index.php;

location / {

try\_files $uri $uri/ =404;

}

}

Enter fullscreen mode Exit fullscreen mode

Ключевые директивы

  • listen — порт
  • server_name — домен
  • root — корень сайта
  • location — правила обработки URL

location: сердце Nginx

Примеры:

Статика


location /assets/ {

expires 30d;

access\_log off;

}

Enter fullscreen mode Exit fullscreen mode

PHP (пока без деталей)


location ~ \.php$ {

include fastcgi\_params;

fastcgi\_pass unix:/run/php/php8.2-fpm.sock;

fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name;

}

Enter fullscreen mode Exit fullscreen mode

Запрет доступа


location ~ /\. {

deny all;

}

Enter fullscreen mode Exit fullscreen mode

Как Nginx читает конфигурацию

Важно понимать порядок:

  1. nginx.conf
  2. http { ... }
  3. include conf.d/*.conf
  4. server { ... }
  5. location { ... }

👉 Если что-то «не работает», почти всегда:

  • директива переопределена ниже;
  • неправильный location;
  • конфиг не подключён через include.

Проверка и перезагрузка

Никогда не делай reload вслепую.


nginx -t

Enter fullscreen mode Exit fullscreen mode

Если всё ок:


systemctl reload nginx

Enter fullscreen mode Exit fullscreen mode

Или:


nginx -s reload

Enter fullscreen mode Exit fullscreen mode

Типовые ошибки новичков

  • ❌ Править не тот файл
  • ❌ Забыть include
  • ❌ Перезапускать вместо reload
  • ❌ Ломать root и alias
  • ❌ Путать try_files

Что дальше по серии

В следующих частях разберём:

  1. Virtual host'ы под несколько сайтов
  2. PHP-FPM и связку с Nginx
  3. Reverse proxy и API
  4. HTTPS, SSL и Certbot
  5. Оптимизацию и производительность
  6. Отладку и логи

Полезные материалы

Практические сниппеты для работы с Nginx:

  • Проверка конфигурации и безопасная перезагрузка — команды nginx -t, systemctl reload nginx
  • Кастомные страницы ошибок (error_page) — настройка 404, 500, 502, 503
  • Настройка логов (access_log, error_log) — уровни логирования, форматирование, ротация
  • Безопасность (server_tokens, заголовки) — скрытие версии, X-Frame-Options, CSP
  • Сжатие gzip для текстовых файлов — оптимизация уровня сжатия и типов файлов
  • Базовый server block для статического сайта — минимальная конфигурация для HTML/CSS/JS

Итог

Nginx — не «чёрный ящик», а простой и логичный инструмент, если понимать:

  • структуру файлов,
  • порядок обработки,
  • базовые директивы.

Освоив фундамент, дальше всё собирается как конструктор.

Read more on viku-lov.ru

Top comments (0)