nginx настройка сервера: Linux, Docker, SSL, RTMP | Пошаговое руководство | AdminWiki

nginx настройка: Полное руководство от установки до продвинутых конфигураций

18 декабря 2025 9 мин. чтения #devops #docker #linux #nginx #rtmp #ssl #веб-сервер #настройка

Представь, что твой веб-сервер — это дирижёр оркестра. Он принимает запросы от зрителей (пользователей), решает, какому музыканту (приложению) их передать, и управляет всем представлением. nginx — один из лучших "дирижёров" в мире веба. Давай разберём, как его правильно настроить под любые задачи: от простого сайта до стримингового медиасервера.

1. Установка и базовая настройка nginx

Первым делом нужно установить nginx на твою систему. Процесс немного отличается в зависимости от дистрибутива Linux.

Установка на Ubuntu/Debian

bash
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

Установка на CentOS/RHEL

bash
sudo yum install epel-release -y
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

Важно: После установки открой браузер и перейди на http://IP_ТВОЕГО_СЕРВЕРА. Если видишь приветственную страницу nginx — установка прошла успешно!

Структура конфигурационных файлов

Давай разберемся, где что лежит. Это основа для любой настройки сервера nginx.

  • /etc/nginx/nginx.conf — главный конфигурационный файл
  • /etc/nginx/sites-available/ — доступные конфиги сайтов
  • /etc/nginx/sites-enabled/ — активные конфиги сайтов (обычно симлинки)
  • /var/log/nginx/ — логи доступа и ошибок
  • /usr/share/nginx/html/ — корневая директория по умолчанию

2. Базовая конфигурация виртуального хоста

Создадим наш первый виртуальный хост для сайта example.com. Это основа nginx linux настройки.

config
# /etc/nginx/sites-available/example.com
server {
    listen 80;
    listen [::]:80;
    
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # Логирование
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
}

Активируем конфиг и проверим синтаксис:

bash
# Создаем симлинк в sites-enabled
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# Проверяем синтаксис конфига
sudo nginx -t

# Если всё OK, перезагружаем nginx
sudo systemctl reload nginx

Опасно: Всегда выполняй nginx -t перед перезагрузкой! Это предотвратит падение сервера из-за ошибки в конфиге.

3. nginx SSL настройка: Защищаем соединение

В современном вебе HTTPS — это must have. Давай настроим SSL с помощью бесплатных сертификатов Let's Encrypt.

Установка Certbot (Let's Encrypt)

bash
# Для Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx -y

# Для CentOS/RHEL
sudo yum install certbot python3-certbot-nginx -y

Получение и настройка SSL сертификата

bash
# Автоматическое получение и настройка SSL
sudo certbot --nginx -d example.com -d www.example.com

Certbot автоматически обновит твой конфиг. Вот как выглядит результат:

config
server {
    server_name example.com www.example.com;
    
    # Редирект с HTTP на HTTPS
    listen 80;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name example.com www.example.com;
    
    # Пути к SSL сертификатам
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    # Современные SSL настройки
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
    ssl_prefer_server_ciphers off;
    
    root /var/www/example.com/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

4. nginx docker настройка: Контейнеризация

Работа с nginx в Docker — это чистота и переносимость. Давай создадим простую связку.

Docker Compose конфигурация

yaml
# docker-compose.yml
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: web_server
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./sites:/etc/nginx/sites-enabled:ro
      - ./html:/usr/share/nginx/html:ro
      - ./ssl:/etc/nginx/ssl:ro
      - ./logs:/var/log/nginx
    restart: unless-stopped
    networks:
      - webnet

  app:
    image: your_application:latest
    container_name: backend_app
    expose:
      - "3000"
    networks:
      - webnet

networks:
  webnet:
    driver: bridge

nginx конфиг для проксирования к приложению

config
# nginx.conf для Docker
events {
    worker_connections 1024;
}

http {
    upstream backend {
        server app:3000;
    }
    
    server {
        listen 80;
        
        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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

5. nginx rtmp настройка: Стриминг медиа

Хочешь создать свой Twitch или YouTube? RTMP модуль для nginx позволяет организовать видеостриминг.

Сборка nginx с RTMP модулем

bash
# Установка зависимостей
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y

# Скачивание исходников
wget https://nginx.org/download/nginx-1.24.0.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz

# Распаковка
 tar -zxvf nginx-1.24.0.tar.gz
 tar -zxvf v1.2.2.tar.gz

# Конфигурация и сборка
cd nginx-1.24.0
./configure --add-module=../nginx-rtmp-module-1.2.2 \
            --with-http_ssl_module \
            --with-http_v2_module
make
sudo make install

Конфигурация RTMP сервера

config
# /usr/local/nginx/conf/nginx.conf
rtmp {
    server {
        listen 1935;  # Стандартный порт RTMP
        chunk_size 4096;
        
        application live {
            live on;
            record off;
            
            # Транскодирование для разных качеств
            exec ffmpeg -i rtmp://localhost/live/$name \
              -c:v libx264 -preset veryfast -b:v 2500k -maxrate 2500k \
              -bufsize 5000k -vf scale=1280:720 -g 60 -c:a aac \
              -b:a 128k -f flv rtmp://localhost/hls/$name_720p;
              
            # HLS выход для веб-плееров
            hls on;
            hls_path /tmp/hls;
            hls_fragment 3;
            hls_playlist_length 60;
        }
        
        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_nested on;
        }
    }
}

# HTTP сервер для раздачи HLS
http {
    server {
        listen 80;
        
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }
        
        # Статистика
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        
        location /stat.xsl {
            root /usr/local/nginx/conf;
        }
    }
}

6. Оптимизация производительности

Правильная настройка сервера nginx включает оптимизацию под нагрузку. Вот ключевые параметры:

Параметр Значение Описание
worker_processes auto Количество worker процессов (обычно равно количеству CPU ядер)
worker_connections 1024 Максимальное количество соединений на worker
keepalive_timeout 65 Таймаут keep-alive соединений в секундах
gzip on Включено Сжатие ответов для экономии трафика
client_max_body_size 100M Максимальный размер тела запроса
config
# Оптимизированный nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

http {
    # Базовые настройки
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    
    # Кэширование файловых дескрипторов
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    
    # Gzip сжатие
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json application/javascript;
    
    # Лимиты
    client_max_body_size 100M;
    client_body_timeout 10;
    reset_timedout_connection on;
    
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    # Подключаем конфиги сайтов
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Часто задаваемые вопросы (FAQ)

Как проверить синтаксис конфигурации nginx?

Используй команду sudo nginx -t. Она проверит все конфигурационные файлы на ошибки синтаксиса и покажет, где именно проблема, если она есть.

Как перезагрузить конфигурацию без простоя?

Команда sudo nginx -s reload или sudo systemctl reload nginx перезагрузит конфигурацию без разрыва существующих соединений.

Где смотреть логи ошибок nginx?

Основные логи находятся в /var/log/nginx/error.log. Логи доступа — в /var/log/nginx/access.log. В конфиге можно настроить отдельные логи для каждого виртуального хоста.

Как настроить nginx для работы с PHP (PHP-FPM)?

Добавь в location блок конфигурации:
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
И подключи fastcgi параметры: include fastcgi_params;

Можно ли использовать nginx как балансировщик нагрузки?

Да, nginx отлично справляется с ролью балансировщика. Используй директиву upstream для определения бэкенд-серверов и методы балансировки: round-robin, least_conn, ip_hash.

Заключение

Мы прошли полный путь nginx настройки — от базовой установки до продвинутых конфигураций. Ты теперь умеешь:

  • Настраивать виртуальные хосты для сайтов
  • Защищать соединения с помощью SSL/TLS
  • Работать с nginx в Docker-контейнерах
  • Организовывать видеостриминг через RTMP
  • Оптимизировать производительность под высокие нагрузки

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

Поделиться:
Сохранить гайд? В закладки браузера