🖥️
Horvitz
Обо мне
  • Содержание
  • DevOps
    • Docker и Docker Compose
    • Ansible
    • Terraform
  • WEB
    • Nginx
  • Linux
    • Удобный терминал
    • IPtables
  • windows
    • Winget
  • VCS
    • Шпаргалка Git
    • Установка и настройка Gitlab EE
    • Установка и настройка Gitlab Runner
  • Мониторинг
    • Grafana
  • Артефакты
    • Nexus Sonatype
Powered by GitBook
On this page
  • 1. Введение
  • 2. Установка и управление Nginx
  • 2.1. Установка
  • 2.2. Управление сервисом
  • 3. Файлы и структура директорий
  • 4. Основные директивы конфигурации
  • 4.1. Пример базовой конфигурации
  • 5. Конфигурация виртуальных хостов (Server Blocks)
  • 5.1. Базовая конфигурация виртуального хоста
  • 5.2. Перенаправления (Редиректы)
  • 6. Проксирование запросов (Reverse Proxy)
  • 6.1. Пример обратного прокси
  • 6.2. Проксирование WebSocket-соединений
  • 7. Балансировка нагрузки
  • 7.1. Определение upstream-группы
  • 7.2. Типы балансировки
  • 8. Безопасность
  • 8.1. Ограничение доступа
  • 8.2. Защита от DDoS и ограничение запросов
  • 8.3. Настройка HTTPS
  • 9. Оптимизация и производительность
  • 9.1. Кэширование статических файлов
  • 9.2. Сжатие данных (Gzip и Brotli)
  • 9.3. Настройка буферов
  • 10. Логирование и отладка
  • 10.1. Формат логов
  • 10.2. Отладка ошибок
  • 10.3. Анализ логов
  • 11. Работа с приложениями (FastCGI, uWSGI, и проч.)
  • 11.1. Обработка PHP через FastCGI
  • 11.2. Работа с Python через uWSGI
  • 12. Расширенные возможности и модули
  • 13. Трюки и советы по устранению неполадок
  • 13.1. Проверка конфигурации
  • 13.2. Вывод полной конфигурации
  • 13.3. Работа с логами
  • 14. Полезные ссылки и ресурсы
  • 15. Заключение

Was this helpful?

Edit on GitHub
  1. WEB

Nginx

Эта документация охватывает базовые и продвинутые темы: от установки и базовой конфигурации до настройки балансировки нагрузки, безопасности и оптимизации производительности.

1. Введение

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


2. Установка и управление Nginx

2.1. Установка

Nginx можно установить из стандартных репозиториев вашей операционной системы. Ниже приведены примеры для разных дистрибутивов Linux:

  • Debian/Ubuntu Используйте пакетный менеджер apt:

    sudo apt update
    sudo apt install nginx -y

    Объяснение: Команда apt update обновляет списки пакетов, а apt install nginx устанавливает Nginx.

  • CentOS/RHEL Вначале добавьте репозиторий EPEL, затем установите Nginx:

    sudo yum install epel-release -y
    sudo yum install nginx -y

    Объяснение: EPEL (Extra Packages for Enterprise Linux) содержит дополнительные пакеты, среди которых и Nginx.

  • Arch Linux Установка через pacman:

    sudo pacman -S nginx

    Объяснение: Arch Linux имеет современный репозиторий, где уже присутствует актуальная версия Nginx.

2.2. Управление сервисом

После установки Nginx управляется с помощью systemd (или другого init-менеджера в зависимости от системы).

  • Запуск сервера

    sudo systemctl start nginx

    Объяснение: Команда запускает службу Nginx, если сервер ранее не был активен.

  • Перезагрузка конфигурации (без остановки активных соединений)

    sudo systemctl reload nginx

    Объяснение: Перезагрузка (reload) позволяет применить изменения конфигурационных файлов без разрыва текущих соединений.

  • Полный перезапуск

    sudo systemctl restart nginx

    Объяснение: Команда останавливает сервер и запускает его заново, что может разорвать соединения.

  • Остановка сервера

    sudo systemctl stop nginx

    Объяснение: Полное отключение сервиса Nginx.

  • Проверка статуса

    sudo systemctl status nginx

    Объяснение: Выводит информацию о запущенном процессе, активных соединениях и последних логах.


3. Файлы и структура директорий

Основные конфигурационные файлы Nginx расположены в каталоге /etc/nginx/. Разделение конфигураций позволяет удобно управлять настройками для отдельных сайтов и сервисов.

Файл/директория
Описание

/etc/nginx/nginx.conf

Главный конфигурационный файл, содержащий глобальные настройки.

/etc/nginx/sites-available/

Каталог с конфигурационными файлами для всех доступных сайтов.

/etc/nginx/sites-enabled/

Символические ссылки на активные конфигурации сайтов.

/var/log/nginx/access.log

Лог запросов (доступа) к серверу.

/var/log/nginx/error.log

Лог ошибок, возникающих при работе сервера.

Объяснение: Использование двух каталогов (sites-available и sites-enabled) позволяет легко включать или отключать сайты с помощью создания/удаления символических ссылок.


4. Основные директивы конфигурации

В файле nginx.conf задаются основные параметры работы сервера, влияющие на производительность и масштабируемость.

4.1. Пример базовой конфигурации

worker_processes auto;
worker_rlimit_nofile 100000;

events {
    worker_connections 4096;
    multi_accept on;
}

Объяснение:

  • worker_processes auto; – позволяет Nginx автоматически определить количество рабочих процессов на основе числа ядер процессора.

  • worker_rlimit_nofile 100000; – задаёт максимальное количество открытых файловых дескрипторов для процессов.

  • worker_connections 4096; – определяет максимальное число одновременных соединений, которое может обрабатывать один рабочий процесс.

  • multi_accept on; – разрешает рабочему процессу принимать несколько соединений за раз, что повышает производительность при большом количестве запросов.


5. Конфигурация виртуальных хостов (Server Blocks)

Виртуальные хосты позволяют обслуживать несколько доменных имен или сайтов на одном сервере.

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

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example;
    index index.html index.htm;
}

Объяснение:

  • listen 80; – указывает, что сервер будет принимать запросы на порту 80 (HTTP).

  • server_name – список доменных имен, для которых применяется эта конфигурация.

  • root – директория, откуда Nginx будет отдавать файлы.

  • index – список файлов, которые будут искаться в каталоге, если запрошен корневой URL.

5.2. Перенаправления (Редиректы)

Редиректы используются для перенаправления пользователей с одного URL на другой.

  • 301 Редирект (постоянный):

    server {
        listen 80;
        server_name oldsite.com;
        return 301 https://newsite.com;
    }

    Объяснение: Все запросы к oldsite.com перенаправляются на https://newsite.com с кодом ответа 301, что означает постоянное перемещение.

  • 302 Редирект (временный):

    server {
        listen 80;
        server_name example.com;
        location /oldpage {
            return 302 /newpage;
        }
    }

    Объяснение: Перенаправление, которое сообщает, что страница временно перемещена.


6. Проксирование запросов (Reverse Proxy)

Nginx часто используется как обратный прокси для передачи запросов от клиентов к бэкенд-серверам, таким как Node.js, Python или другие HTTP-сервисы.

6.1. Пример обратного прокси

location /api/ {
    proxy_pass http://backend_server:5000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Объяснение:

  • location /api/ – указывает, что для URL, начинающихся с /api/, применяется данная настройка.

  • proxy_pass – перенаправляет запросы на указанный бэкенд-сервер.

  • proxy_set_header – устанавливает заголовки, чтобы передать оригинальные данные запроса, такие как IP адрес клиента и имя хоста.

6.2. Проксирование WebSocket-соединений

Для поддержки протокола WebSocket необходимо передать специальные заголовки:

location /ws/ {
    proxy_pass http://localhost:8080;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

Объяснение: Заголовки Upgrade и Connection необходимы для установления WebSocket-соединения между клиентом и сервером.


7. Балансировка нагрузки

Nginx может распределять входящие запросы между несколькими серверами, повышая отказоустойчивость и производительность.

7.1. Определение upstream-группы

upstream backend {
    server backend1.local weight=2;
    server backend2.local;
    server backend3.local backup;
}
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend;
    }
}

Объяснение:

  • upstream backend { ... } – создаёт группу серверов для балансировки нагрузки.

  • weight=2 – задаёт больший приоритет для данного сервера (его запросов будет обрабатываться больше).

  • backup – сервер используется только в случае недоступности основных серверов.

  • В блоке server через proxy_pass запросы перенаправляются в upstream-группу.

7.2. Типы балансировки

  • Round Robin – запросы равномерно распределяются между серверами (используется по умолчанию).

  • Least Connections (least_conn) – запрос отправляется серверу с наименьшим числом активных соединений.

  • IP Hash (ip_hash) – запросы от одного клиента всегда направляются на один и тот же сервер (полезно для сессий).


8. Безопасность

Обеспечение безопасности — важная задача при настройке веб-сервера. Рассмотрим несколько подходов.

8.1. Ограничение доступа

Вы можете ограничить доступ к определённым ресурсам по IP-адресам:

location /admin/ {
    allow 192.168.1.0/24;
    deny all;
}

Объяснение: Только клиенты с IP-адресами из подсети 192.168.1.0/24 получат доступ к /admin/, все остальные будут заблокированы.

8.2. Защита от DDoS и ограничение запросов

Используйте директивы limit_req_zone и limit_req для защиты от атак и чрезмерного количества запросов:

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server {
    location /login/ {
        limit_req zone=one burst=10 nodelay;
    }
}

Объяснение: Ограничение до 5 запросов в секунду для каждого IP. Параметр burst позволяет кратковременно превышать лимит до 10 запросов.

8.3. Настройка HTTPS

Использование SSL/TLS для шифрования данных важно для безопасности пользователей:

  • Установите certbot для автоматического получения сертификатов от Let's Encrypt:

    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d example.com -d www.example.com
  • Конфигурация HTTPS:

    server {
        listen 443 ssl;
        server_name example.com;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        include ssl_params.conf;
    }

    Объяснение: Директива ssl_certificate указывает на путь к сертификату, а ssl_certificate_key — на приватный ключ. Рекомендуется включать дополнительные параметры безопасности через файл ssl_params.conf.


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

9.1. Кэширование статических файлов

Позволяет клиентам (браузерам) кэшировать ресурсы, что снижает нагрузку на сервер:

location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg)$ {
    expires max;
    log_not_found off;
}

Объяснение: Директива expires max; сообщает браузеру, что файлы можно кэшировать на максимально возможный срок.

9.2. Сжатие данных (Gzip и Brotli)

Сжатие снижает объём передаваемых данных:

  • Gzip:

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary on;
  • Brotli (если модуль включен):

    brotli on;
    brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Объяснение: Gzip и Brotli позволяют уменьшить время загрузки страниц за счёт сжатия контента до передачи клиенту.

9.3. Настройка буферов

Параметры буферизации позволяют оптимизировать обработку больших объёмов данных:

client_body_buffer_size 16K;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;

Объяснение: Эти параметры помогают снизить вероятность ошибок при передаче больших запросов или ответов, особенно при работе с медленными клиентами.


10. Логирование и отладка

10.1. Формат логов

Вы можете настроить формат логов для удобства последующего анализа:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;

Объяснение: Формат main задаёт структуру логов, которая позволяет отслеживать IP, дату, запрос, статус ответа и другую полезную информацию.

10.2. Отладка ошибок

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

error_log /var/log/nginx/error.log debug;

Объяснение: Режим debug позволяет записывать детальную информацию об обработке запросов. Это полезно при поиске сложных ошибок, но не рекомендуется использовать в рабочей среде длительное время из-за объёма логов.

10.3. Анализ логов

tail -f /var/log/nginx/error.log

Объяснение: Команда tail -f позволяет наблюдать за появлением новых записей в логе.


11. Работа с приложениями (FastCGI, uWSGI, и проч.)

Nginx может служить связующим звеном между веб-сервером и языковыми интерпретаторами.

11.1. Обработка PHP через FastCGI

Для интеграции с PHP используется php-fpm:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

Объяснение: Директива fastcgi_pass указывает на сокет, через который Nginx передаёт запросы на обработку PHP. Файл fastcgi_params содержит стандартные переменные окружения.

11.2. Работа с Python через uWSGI

Для Python-приложений можно использовать uWSGI:

location / {
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi/app.sock;
}

Объяснение: Конфигурация аналогична работе с PHP, но используется протокол uWSGI.


12. Расширенные возможности и модули

Nginx поддерживает множество модулей, как встроенных, так и сторонних. Некоторые из них:

  • Модуль HTTP Stub Status: Позволяет отслеживать состояние сервера.

    location /nginx_status {
        stub_status;
        allow 127.0.0.1;  # Ограничение доступа для локальных запросов
        deny all;
    }
  • Модуль Rewrite: Используется для динамической обработки URL.

    location / {
        rewrite ^/old/(.*)$ /new/$1 permanent;
    }
  • Модуль Limit Rate: Ограничивает скорость отдачи данных клиентам.

    location /downloads/ {
        limit_rate 500k;
    }

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


13. Трюки и советы по устранению неполадок

13.1. Проверка конфигурации

Перед применением новых настроек всегда проверяйте синтаксис:

nginx -t

Объяснение: Команда сообщает, корректна ли конфигурация, и указывает на возможные ошибки.

13.2. Вывод полной конфигурации

Для отладки можно вывести всю конфигурацию:

nginx -T

Объяснение: Это полезно для поиска конфликтующих настроек или устаревших директив.

13.3. Работа с логами

Регулярный анализ логов позволяет оперативно выявлять проблемы. Используйте фильтрацию (например, grep), чтобы отыскать ошибки:

grep 'error' /var/log/nginx/error.log

14. Полезные ссылки и ресурсы

  • Инструменты мониторинга и анализа логов:

  • Сообщества и форумы:

    • StackOverflow, Reddit, специализированные группы в Telegram — отличное место для обмена опытом и получения помощи.


15. Заключение

Эта документация охватывает полный спектр возможностей Nginx — от базовой установки до тонкой настройки параметров для повышения производительности и безопасности. Благодаря гибкости конфигурации и широкому набору модулей Nginx остаётся одним из самых популярных инструментов для разработки высоконагруженных веб-сервисов.

Если у вас появились дополнительные вопросы или требуется помощь с настройкой конкретных функций, обращайтесь к официальной документации или специализированным сообществам.

PreviousTerraformNextУдобный терминал

Last updated 3 months ago

Was this helpful?

Используйте утилиты вроде tail, grep или специализированные программы (например, ) для мониторинга логов в реальном времени:

Официальная документация: Объяснение: Это основной источник информации и справки по директивам и модулям.

Генератор конфигураций: Объяснение: Удобный онлайн-инструмент для создания стартовой конфигурации.

— анализатор логов в реальном времени.

— интерактивный анализатор логов.

ngxtop
nginx.org
nginxconfig.io
ngxtop
GoAccess