Установка Nginx на Ubuntu, Debian, ALT Linux, RedOS и CentOS

Содержание
- Что такое Nginx и зачем он нужен?
- 1. Подготовка окружения для установки Nginx
- 1.1 Ubuntu / Debian
- 1.2 RedOS / ALT Linux
- 2. Установка Nginx на различные дистрибутивы
- 2.1 Ubuntu / Debian
- 2.2 RedOS / CentOS Stream 10
- 2.3 ALT Linux
- 3. Запуск и автозапуск службы
- 4. Структура конфигурационных файлов Nginx
- 4.1 Главный файл: /etc/nginx/nginx.conf
- 4.2 Каталоги с дополнительными конфигурациями
- 5. Базовые блоки конфигурации Nginx
- 5.1 events { … }
- 5.2 http { … }
- 5.3 server { … }
- 5.4 location { … }
- 6. Проверка синтаксиса и перезагрузка
- 6.1 Проверка синтаксиса
- 6.2 Плавная перезагрузка (graceful reload)
- 6.3 Полная перезагрузка / рестарт
- 6.4 Диагностика ошибок
- 7. Дополнительные советы по оптимизации
- Тюнинг worker_processes и worker_connections
- Буферизация и таймауты
- Кэширование
- HTTP/2 и HTTP/3
- Заключение
Что такое Nginx и зачем он нужен?
Nginx (Engine X) — это лёгкий и высокопроизводительный веб‑сервер с открытым исходным кодом, впервые появившийся в 2004 году под редакцией Игоря Сысоева. Благодаря событийной (асинхронной) архитектуре, Nginx способен обрабатывать десятки тысяч одновременных соединений с минимальным потреблением памяти и CPU, что делает его одним из самых популярных серверов в мире: по состоянию на начало 2025 года более 30 % всех веб‑сайтов используют Nginx в качестве сервера.
- Обратное проксирование и балансировка нагрузки. Nginx умеет принимать входящие запросы и распределять их между несколькими серверами приложений (PHP‑FPM, Node.js, Python, Go и др.), что повышает отказоустойчивость и упрощает горизонтальное масштабирование.
- Отдача статического контента. Благодаря оптимизированной системе
sendfile
и буферизации, Nginx быстро отдаёт файлы (HTML, CSS, JS, изображения, видео), минимизируя задержки. - Поддержка SSL/TLS «из коробки». Можно легко подключить сертификаты от Let's Encrypt или коммерческих провайдеров, настроить HSTS и OCSP Stapling для повышения безопасности.
- Кэширование. Встроенный механизм
proxy_cache
иfastcgi_cache
позволяет хранить ответы от бэкенда в памяти или на диске, уменьшая нагрузку на серверы приложений и ускоряя выдачу повторяющихся запросов. - Гибкие возможности по расширению. Существует масса модулей (официальных и сторонних), позволяющих обрабатывать HTTP/2, HTTP/3 (QUIC), WebSocket, а также писать собственные скрипты на Lua.
В результате правильная конфигурация Nginx положительно влияет на скорость загрузки страниц, снижает задержки, улучшает метрики Core Web Vitals и, как следствие, повышает позиции сайта в поисковой выдаче.
1. Подготовка окружения для установки Nginx
Перед началом работы убедитесь, что:
- У вас есть доступ к серверу с правами root или пользователем, входящим в группу sudo.
- Сервер подключён к интернету и обновлены системные репозитории.
Совет по безопасности:
На продакшн‑серверах лучше выполнять команды черезsudo
для минимизации рисков, а не оставаться в среде root дольше, чем нужно. Чтобы выйти из root‑сессии, используйтеexit
или нажмитеCtrl+D
.
1.1 Ubuntu / Debian
sudo -i
1.2 RedOS / ALT Linux
su -
2. Установка Nginx на различные дистрибутивы
По умолчанию в официальных репозиториях многие дистрибутивы содержат достаточно актуальные пакеты Nginx. Однако если требуется самая свежая стабильная или mainline‑версия, можно подключить официальный репозиторий от nginx.org (рекомендуется для продакшн‑систем).
Обновляем системные пакеты и устанавливаем утилиты:
2.1 Ubuntu / Debian
sudo apt update
sudo apt install -y nginx
2.2 RedOS / CentOS Stream 10
sudo dnf update -y
sudo dnf install -y nginx
2.3 ALT Linux
В ALT Linux по умолчанию обычный пользователь не входит в группу wheel, поэтому ему нужно предоставить соответствующие права для использования sudo. Чтобы это сделать, выполните следующие шаги:
- Переключитесь на пользователя root
su -
- Добавьте нужного пользователя в группу wheel
Заменитеимя_пользователя
на реальное имя пользователя:usermod -aG wheel имя_пользователя
- Откройте файл
/etc/sudoers
nano /etc/sudoers
- Разрешите членам группы wheel выполнять команды через sudo
Найдите строку:
и удалите символ#WHEEL_USERS ALL=(ALL:ALL) ALL
#
в начале строки, чтобы получилось:WHEEL_USERS ALL=(ALL:ALL) ALL
- Выйдите из-под root и проверьте sudo
Теперь попробуйте выполнить любую команду с sudo, например:exit
Ожидается, что в ответе будетsudo whoami
root
.
Теперь обновите список пакетов и установите nginx
sudo apt-get update -y
sudo apt-get install -y nginx
3. Запуск и автозапуск службы
После установки запускаем и включаем автозапуск:
sudo systemctl enable --now nginx
Проверяем статус:
sudo systemctl status nginx
Если Nginx запущен успешно, вы увидите строчку:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since
4. Структура конфигурационных файлов Nginx
Конфигурация Nginx организована в виде иерархии:
/etc/nginx/
├── nginx.conf
├── conf.d/
│ └── default.conf
├── sites-available/ # (Debian/Ubuntu/ALT Linux)
│ └── example.com.conf
├── sites-enabled/ # (Debian/Ubuntu/ALT Linux)
│ └── example.com.conf -> ../sites-available/example.com.conf
├── snippets/
│ ├── ssl-params.conf
│ └── fastcgi-php.conf
└── mime.types
4.1 Главный файл: /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
# Ограничивает число соединений на один worker.
# При worker_processes auto и 4 ядрах CPU получится до 4096 соединений.
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
aio on;
keepalive_timeout 65;
client_max_body_size 100m;
# Включаем сжатие (gzip) для текстовых и JSON-ответов
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# Включаем HTTP/2 (при наличии SSL в server-блоках достаточно listen 443 ssl http2;)
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
user www-data;
— определяет системного пользователя, под которым будут работать рабочие процессы.worker_processes auto;
— Nginx сам определит оптимальное число worker-процессов по количеству ядер CPU.worker_connections
— максимальное число одновременных соединений на один worker. Общее максимальное количество соединений =worker_processes × worker_connections
.sendfile on;
иtcp_nopush on;
ускоряют отдачу статических файлов.aio on;
позволяет Nginx использовать асинхронный ввод‑вывод, что дополнительно снижает нагрузку.client_max_body_size 100m;
указывает максимальный размер тела запроса (например, при загрузке файлов).
4.2 Каталоги с дополнительными конфигурациями
4.2.1 /etc/nginx/conf.d/
Файлы *.conf
в этом каталоге автоматически подключаются из главного nginx.conf
. Обычно здесь размещают:
- Глобальные правила проксирования (upstream-блоки)
- Общие шаблоны (templates) для нескольких сайтов
- Конфигурации, не входящие в
sites-available
Пример /etc/nginx/conf.d/load_balancer.conf
:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
least_conn;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4.2.2 /etc/nginx/sites-available/
и /etc/nginx/sites-enabled/
Примечание (Debian/Ubuntu/ALT Linux).
На CentOS/RedOS обычно каталоговsites-available
иsites-enabled
нет, всё хранится вconf.d/
. В других дистрибутивах можно вручную создать такие каталоги для удобства.
sites-available/
— здесь лежат конфигурации виртуальных хостов для каждого домена, но они не активны до создания символической ссылки.sites-enabled/
— ссылки на файлы изsites-available/
. При перезагрузке Nginx активируются только они.
Чтобы включить сайт:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Чтобы отключить:
sudo rm /etc/nginx/sites-enabled/example.com.conf
Пример sites-available/example.com.conf
:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
# Обработка запросов к статическим файлам
location / {
try_files $uri $uri/ =404;
}
# Проксирование /api/ на внутренний backend
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# Обработка PHP через PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
# Настройка логов для этого сайта
access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log warn;
}
listen 80;
— прослушивать HTTP-порт 80.server_name example.com www.example.com;
— доменные имена, по которым обрабатывается трафик.root /var/www/example.com/html;
— корневая папка сайта.index index.html index.htm index.php;
— при обращении к директории отдаёт эти файлы по умолчанию.try_files $uri $uri/ =404;
— попытаться вернуть файл, затем папку, иначе выдать 404.location /api/ { proxy_pass http://127.0.0.1:3000; ... }
— проксирование запросов в бэкенд-сервис.location ~ \.php$ { ... }
— регулярное выражение: обрабатывает все .php файлы через FastCGI.
4.2.3 /etc/nginx/snippets/
Содержит «сниппеты» — фрагменты конфигураций для включения в разные server- и location-блоки, чтобы не дублировать код.
fastcgi-php.conf
(Debian/Ubuntu) — включает основные параметры для PHP-FPM:fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; include fastcgi.conf;
ssl-params.conf
— рекомендуемые безопасные настройки SSL/TLS:ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
5. Базовые блоки конфигурации Nginx
5.1 events { … }
events {
worker_connections 1024;
multi_accept on;
use epoll; # Для Linux-ядра; на других ОС выбирается автоматически
}
worker_connections
— максимальное количество соединений, обрабатываемых одним worker.multi_accept on;
— позволяет воркеру сразу принимать все ожидающие соединения, а не по одному.use epoll;
— рекомендуемый метод для Linux. На системах BSD/Cross-Platform используется kqueue или select.
5.2 http { … }
http {
sendfile on;
tcp_nopush on;
aio on;
directio 512;
keepalive_timeout 65;
client_max_body_size 100m;
client_body_buffer_size 128k;
gzip on;
gzip_min_length 1024;
gzip_buffers 4 16k;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
# Настройка кеша для проксирования
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
directio 512;
позволяет использовать прямой ввод‑вывод для больших файлов (>512 байт).client_body_buffer_size 128k;
буфер для тела запроса (например, при загрузке файлов).proxy_cache_path /var/cache/nginx …;
настраивает дисковый кэш для проксируемых ответов.
5.3 server { … }
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include snippets/ssl-params.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_cache my_cache;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log warn;
}
listen 443 ssl http2;
— подключаем SSL и включаем HTTP/2.include snippets/ssl-params.conf;
— подключаем безопасные параметры SSL/TLS.location /api/ { ... } proxy_cache my_cache;
— пример включения кэша для бэкенда.
5.4 location { … }
location = /favicon.ico { log_not_found off; access_log off; }
— пример отключения логов для favicon.location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; }
— отдаём статические файлы с заголовкомExpires
, чтобы браузеры кэшировали их 30 дней.location ~ \.php$ { ... }
— регулярное выражение для обработки PHP‑скриптов.
Приоритет сопоставления location
:
1. Точное совпадение (=
).
2. Префиксное совпадение (длиннейший префикс).
3. Регулярные выражения (~
, ~*
, ^~
).
4. Стандартное префиксное совпадение (самое длинное).
6. Проверка синтаксиса и перезагрузка
6.1 Проверка синтаксиса
Перед каждым перезапуском или перезагрузкой конфигурации выполняйте:
sudo nginx -t
Если ошибок нет, вы увидите:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Если есть ошибки, Nginx подскажет строку и файл, где проблема.
6.2 Плавная перезагрузка (graceful reload)
Чтобы применить новые настройки без разрыва активных соединений:
sudo systemctl reload nginx
# или
sudo nginx -s reload
Nginx запустит новые worker‑процессы с новой конфигурацией, а старые завершат обработку текущих запросов и завершатся самостоятельно.
6.3 Полная перезагрузка / рестарт
Если нужно перезапустить службу «насильно»:
sudo systemctl restart nginx
При этом все активные соединения будут сброшены, и запустятся новые процессы.
6.4 Диагностика ошибок
Просмотр статуса службы
sudo systemctl status nginx
Логи systemd
sudo journalctl -u nginx --since "1 hour ago"
Логи Nginx:
/var/log/nginx/error.log
— основные ошибки (по умолчанию уровень «warn»)./var/log/nginx/access.log
— все запросы к серверу.
Если после изменений Nginx не стартует, обычно в error.log
или journalctl
видно, какая директива или файл ошибок.
7. Дополнительные советы по оптимизации
Тюнинг worker_processes и worker_connections
worker_processes auto;
обычно достаточно, но при специфических нагрузках можно задать вручную.
worker_connections
увеличивайте пропорционально ожидаемому трафику. Например, для сайта с 100 000 одновременными посетителями при 4 ядрах:
worker_processes 4;
worker_connections 16384;
Общее максимальное число соединений: 4 × 16384 = 65 536.
Буферизация и таймауты
client_body_buffer_size 128k;
client_body_timeout 20s;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
send_timeout 5s;
Эти параметры помогают защититься от «медленных» клиентов и предотвратить DDoS‑атаки.
Кэширование
proxy_cache: ускоряет выдачу контента, если бэкенд не успевает отвечать.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_zone:10m max_size=5g inactive=60m use_temp_path=off;
А в server-блоке:
location / {
proxy_cache my_zone;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
fastcgi_cache: аналогично для PHP/FastCGI.
HTTP/2 и HTTP/3
Для включения HTTP/2 достаточно добавить http2
в параметр listen
:
listen 443 ssl http2;
Для HTTP/3 (QUIC) потребуется собранный модуль Quiche и дополнительная настройка, что выходит за рамки базовой статьи.
Заключение
В этой статье мы кратко рассмотрели:
- Что такое Nginx и его ключевые функции (обратное проксирование, отдача статического контента, SSL/TLS, кэширование).
- Как установить Nginx на популярных дистрибутивах Linux (Ubuntu/Debian, CentOS, RedOS, ALT Linux).
- Основную структуру конфигурационных файлов:
nginx.conf
, каталогиconf.d/
,sites-available/
иsites-enabled/
,snippets/
. - Базовые блоки конфигурации:
events
,http
,server
,location
. - Проверку синтаксиса, перезагрузку службы и основные команды для диагностики.
- Несколько советов по оптимизации производительности и кэшированию.
Теперь у вас есть представление, как быстро развернуть и настроить Nginx для стандартных задач: от простого статического сайта до проксирования приложения. Дальше можно углубиться в темы балансировки нагрузки, расширенного кэширования и мониторинга.
Если вы собираетесь проксировать приложения на Go, рекомендуем ознакомиться с обзором возможностей фреймворка Gin, где подробно разобрано, как с ним работать и какие функции он предоставляет. Это отличный выбор для написания быстрых и лёгких веб-приложений.
Удачи в настройке и эксплуатации Nginx!