19.11.2024

Настройка Nginx на сервере

server one
HOSTKEY

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

Что такое Nginx?

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

Установка Nginx

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

Для серверов на базе Ubuntu или Debian установка Nginx проста и может быть выполнена с помощью команды apt:

sudo apt update
sudo apt install nginx

Это обновит список пакетов и установит последнюю стабильную версию Nginx. После установки вы можете проверить статус сервиса с помощью следующей команды:

sudo systemctl status nginx

Установка Nginx на CentOS/RHEL/AlmaLinux/Rocky Linux

Для серверов на базе CentOS 7 или Red Hat Enterprise Linux (RHEL) сначала нужно добавить репозиторий Nginx, а затем установить rpm-пакет с ним:

yum install epel-release
yum install nginx

Для Centos Stream 8/AlmaLinux 8/Rocky Linux 8

dnf config-manager--set-enabled powertools
dnf install epel-release epel-next-release
dnf install nginx

Для CentOS Stream 9/Alma 9/Rocky Linux 9

dnf config-manager --set-enabled crb
dnf install epel-release epel-next-release
dnf install nginx

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

sudo systemctl start nginx
sudo systemctl enable nginx

Как запустить Nginx

После установки Nginx, чтобы запустить сервер, выполните следующую команду:
sudo service nginx start
Для остановки сервера используйте команду:
sudo service nginx stop
Чтобы перезапустить Nginx (например, после изменения конфигурации), используйте команду:
sudo service nginx reload

Установка Nginx через Docker

Если вы предпочитаете использовать Docker, установка Nginx в контейнере также не вызовет проблем. Нужно просто выполнить следующие шаги:

1. Убедиться, что у вас установлен Docker.

2. Выполнить следующую команду для запуска контейнера Nginx:

docker run-d --name my_nginx-p 80:80-v /path/to/nginx/config:/etc/nginx/conf.d nginx

Эта команда запустит контейнер Nginx, сопоставив порт 80 хоста с портом 80 контейнера, и смонтирует вашу локальную директорию конфигурации Nginx в контейнер.

Если вы используете нестандартные директории для хранения конфигурации и размещения файлов вашего сервера, передайте их в строке запуска через параметр -v. Так, если у вас директорию сайта располагается по пути /root/site, добавьте в команду запуска:

-v /root/site:/usr/share/nginx/html

Она свяжет эту директорию с директорией usr/share/nginx/html (директория, которую Nginx использует для хранения статических файлов сайта по умолчанию) внутри контейнера Nginx.

docker run -d --name my_nginx \
  -p 80:80 \
  -v /path/to/nginx/config:/etc/nginx/conf.d \
  -v /root/site:/usr/share/nginx/html \
  nginx

Настройка Nginx

Основная конфигурация Nginx находится в файле /etc/nginx/nginx.conf. В этом файле находятся основные директивы и ссылки на другие файлы конфигурации.

Основные директивы Nginx

Nginx имеет множество директив для настройки его поведения. Вот некоторые важные:

  • server. Определяет параметры для конкретного виртуального сервера.
  • listen. Указывает порт и IP-адрес, на котором будет слушать сервер.
  • server_name. Задает доменное имя или IP-адрес сервера.
  • location. Используется для настройки обработки запросов в зависимости от URL-пути.
  • root. Определяет корневую директорию для обслуживания статического контента.
  • proxy_pass. Осуществляет проксирование запросов на другой сервер.

Переменные и команды

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

Переменная Описание
request_uri Запрошенный URI, начиная от корня веб-сайта (например /documentation). Не включает в себя протокол, имя хоста или порт
host Хост из запроса
remote_addr IP-адрес клиента

Вы также можете использовать команды для выполнения действий при обработке запросов: например, return для немедленного возвращения ответа.

SSL-сертификат: установка и настройка на Nginx

Чтобы обеспечить безопасное соединение, вы можете установить SSL-сертификат на ваш сервер Nginx. Вот основные шаги:
  1. Получите SSL-сертификат от доверенного центра сертификации (ЦС) или создайте самоподписанный сертификат.

  2. Поместите файлы сертификата и ключа в безопасное место на сервере, например /etc/ssl/certs и /etc/ssl/private.

  3. Откройте файл конфигурации сервера Nginx (обычно /etc/nginx/sites-available/default) и добавьте или измените следующий блок:

    server {
    	listen 443 ssl;
    	ssl_certificate /etc/ssl/certs/your_certificate.crt;
    	ssl_certificate_key /etc/ssl/private/your_private_key.key;
    	...
    }

После сохранения изменений перезагрузите Nginx для применения конфигурации.

Настройка редиректов на Nginx

Nginx позволяет легко перенаправлять запросы с одного URL-адреса на другой. Это может быть полезно при миграции сайтов или управлении несколькими доменами. Ниже приведен пример настройки редиректа:

server {
  listen 80;
  server_name old.example.com;

  location / {
    return 301 https://new.example.com$request_uri;
  }
}

В этом примере все запросы к old.example.com будут перенаправлены на new.example.com с использованием кода ответа 301 (постоянное перенаправление).

Статика и файлы

Для обслуживания статических файлов, таких как HTML, CSS, JavaScript и изображения, Nginx может быть настроен следующим образом:

server {
  listen 80;
  server_name static.example.com;

  root /var/www/static;
  index index.html;

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

В этом примере Nginx будет обслуживать статические файлы из директории /var/www/static.

Настройка кэша

Nginx может кэшировать ответы, что улучшает производительность и снижает нагрузку на бэкенд-серверы. Для настройки кэша используйте директиву proxy_cache:

server {
  listen 80;
  server_name cache.example.com;

  location / {
    proxy_pass http://backend_server;
    proxy_cache cache_store;
    proxy_cache_valid 30m;
  }
}

Этот пример кэширует ответы с бэкенд-сервера в течение 30 минут.

Нагрузка и балансировка

Nginx отлично подходит для балансировки нагрузки между несколькими серверами. Вы можете настроить балансировку нагрузки с помощью директивы upstream:

upstream backend_servers {
  server server1.example.com;
  server server2.example.com;
}

server {
  listen 80;
  server_name loadbalanced.example.com;

  location / {
    proxy_pass http://backend_servers;
  }
}

Мониторинг работы Nginx

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

  • Nginx Status Module. Предоставляет страницу статуса с информацией о текущих соединениях и обработанных запросах.
  • Zabbix. Популярная платформа для мониторинга, которая может собирать метрики из Nginx.
  • Graphite и Grafana. Инструменты визуализации, которые могут отображать данные производительности Nginx.

Настройка безопасности

Защита от DDoS-атак

Nginx может помочь защитить ваш сервер от DDoS-атак с помощью следующих стратегий:

  • Ограничение скорости. Ограничьте количество запросов с одного IP-адреса с помощью директивы limit_req.
  • Фильтрация по IP-адресу. Блокируйте или разрешайте доступ на основе IP-адресов с помощью директивы allow и deny.
  • Настройка тайм-аутов. Настройте тайм-ауты для предотвращения блокировки ресурсов.

Основные ошибки и коды ответов Nginx

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

Код Расшифровка
200 OK Запрос успешно обработан
301 Moved Permanently Постоянное перенаправление на новый URL-адрес
404 Not Found Запрошенный ресурс не найден
502 Bad Gateway Ошибка при проксировании запроса на бэкенд-сервер

Для более подробного описания кодов ответов Nginx смотрите нашу статью о кодах ответа HTTP.

Заключение

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

Другие статьи

29.10.2025

Осенние будни DevOps: Debian 13 и Proxmox VE 9.0 в продакшене HOSTKEY

Новая версия Debian 13 и релиз Proxmox VE 9.0 пришли почти одновременно, вызвав ажиотаж у клиентов. В статье рассказываем, как команда HOSTKEY адаптировала свои процессы, автоматизировала деплой и подготовила инфраструктуру под свежие релизы.

22.10.2025

Чек-лист: 5 признаков, что вашему бизнесу пора переезжать с облака на выделенный сервер

Платите за облако, но всё делаете сами? При бюджете от 5 000 ₽ выделенный сервер выгоднее. Смотрите чек-лист и тесты cloud vs bare metal.

29.09.2025

Что делать, если ваш ноутбук сломался? Как Kasm превратит даже старый планшет в рабочую станцию

Когда технические сбои прерывают работу, Kasm Workspaces становится спасением, превращая устаревшие устройства в полноценные рабочие станции через браузер. В статье рассматривается, как платформа решает проблемы сломанных ноутбуков и дефицита оборудования, сравниваются версии (Community, Starter, Enterprise, Cloud), анализируются требования к ресурсам и результаты тестирования на VPS.

24.09.2025

Замена Google Meet в условиях блокировок: Jitsi Meet и другие альтернативы для бизнеса

Когда Google Meet внезапно начал «тормозить» в России, мы оказались перед выбором: Zoom, Яндекс Телемост, NextCloud или self-hosted решения. После тестов мы остановились на Jitsi Meet на VPS и проверили его в боевых условиях. Делимся опытом и подводными камнями.

18.09.2025

Мониторинг SSL-сертификатов в oVirt Engine: как мы научились спать спокойно благодаря Go и Prometheus

Как избежать простоев и сбоев из-за просроченных SSL-сертификатов? Мы в HOSTKEY разработали простой, но надёжный инструмент на Go для oVirt Engine, интегрированный с Prometheus и Grafana. Теперь система сама предупреждает о проблемах — задолго до их возникновения.

Upload