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. Вот основные шаги:-
Получите SSL-сертификат от доверенного центра сертификации (ЦС) или создайте самоподписанный сертификат.
-
Поместите файлы сертификата и ключа в безопасное место на сервере, например /etc/ssl/certs и /etc/ssl/private.
-
Откройте файл конфигурации сервера 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 может быть очень специфичной для вашего проекта, поэтому всегда тестируйте изменения в контролируемой среде перед развертыванием в продакшн.