Представь, что тебе нужно развернуть быстрый и надежный веб-сервер для проекта. Nginx — это мощное решение, которое справляется с высокими нагрузками и легко настраивается. В этой статье я, как Senior DevOps, покажу тебе все шаги: от базовой установки до продвинутой конфигурации с мониторингом.
Что такое Nginx и зачем он нужен?
Nginx — это высокопроизводительный HTTP-сервер и обратный прокси. В отличие от Apache, он использует асинхронную архитектуру, что делает его идеальным для сайтов с высокой посещаемостью. Сегодня мы разберем установку nginx на двух самых популярных дистрибутивах.
Подготовка системы перед установкой
Перед тем как начать установку nginx ubuntu или debian, обнови репозитории пакетов. Это гарантирует, что ты получишь последние стабильные версии.
sudo apt update
sudo apt upgrade -y
Установка Nginx на Ubuntu
Процесс установки nginx на Ubuntu максимально прост благодаря встроенным репозиториям.
sudo apt install nginx -y
После установки проверь статус службы:
sudo systemctl status nginx
sudo systemctl start nginx и sudo systemctl enable nginx для автозапуска.
Установка Nginx на Debian
Установка nginx debian практически идентична Ubuntu, но иногда требует дополнительных шагов.
sudo apt install nginx -y
nginx-light или nginx-full. Используй apt search nginx для проверки.
Базовая настройка и проверка работы
После установки давай проверим, что Nginx работает корректно.
# Проверка версии
nginx -v
# Проверка синтаксиса конфигурации
sudo nginx -t
# Перезагрузка конфигурации без простоя
sudo systemctl reload nginx
Открой браузер и перейди по адресу http://IP_ТВОЕГО_СЕРВЕРА. Ты должен увидеть стандартную страницу приветствия Nginx.
Настройка виртуальных хостов (серверных блоков)
В Nginx вместо виртуальных хостов Apache используются server blocks. Создадим конфигурацию для тестового сайта.
sudo nano /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;
location / {
try_files $uri $uri/ =404;
}
# Базовые настройки безопасности
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
}
Активируем конфигурацию и создадим директорию сайта:
# Создаем символическую ссылку
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# Создаем директорию для сайта
sudo mkdir -p /var/www/example.com/html
# Создаем тестовую страницу
sudo echo "Hello from Nginx!
" > /var/www/example.com/html/index.html
# Проверяем конфигурацию и перезагружаем
sudo nginx -t
sudo systemctl reload nginx
Настройка SSL/TLS с Let's Encrypt
Современные сайты требуют HTTPS. Установим Certbot для автоматического получения SSL-сертификатов.
# Установка Certbot для Nginx
sudo apt install certbot python3-certbot-nginx -y
# Получение сертификата
sudo certbot --nginx -d example.com -d www.example.com
Автоматическое обновление сертификатов
Certbot автоматически добавляет задание в cron. Проверить можно командой:
sudo systemctl list-timers | grep certbot
Интеграция Nginx с Zabbix для мониторинга
Теперь разберем установку zabbix nginx для мониторинга производительности веб-сервера.
Установка и настройка Zabbix Agent
Сначала установим Zabbix Agent на сервер с Nginx:
# Добавляем репозиторий Zabbix
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo apt update
# Устанавливаем Zabbix Agent
sudo apt install zabbix-agent -y
Настройка мониторинга Nginx в Zabbix
Zabbix может мониторить статус Nginx через stub_status модуль. Добавим его в конфигурацию:
# В конфигурации Nginx добавляем
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1; # Разрешаем только localhost
allow 192.168.1.0/24; # И сеть Zabbix сервера
deny all;
}
Настройка Zabbix Agent для сбора метрик:
# В /etc/zabbix/zabbix_agentd.conf добавляем
UserParameter=nginx.status[*],curl -s http://127.0.0.1/nginx_status | grep "$1" | awk '{print $$2}'
UserParameter=nginx.active_connections,curl -s http://127.0.0.1/nginx_status | awk '/Active connections/ {print $$3}'
UserParameter=nginx.requests,curl -s http://127.0.0.1/nginx_status | awk '/^\s[0-9]+\s[0-9]+\s[0-9]+/ {print $$2}'
sudo systemctl reload nginx и sudo systemctl restart zabbix-agent.
Оптимизация производительности Nginx
Вот ключевые параметры для настройки в /etc/nginx/nginx.conf:
| Параметр | Рекомендуемое значение | Описание |
|---|---|---|
| worker_processes | auto | Автоматически определяет количество ядер CPU |
| worker_connections | 1024 | Максимальное количество соединений на воркер |
| keepalive_timeout | 65 | Таймаут keep-alive соединений |
| gzip on | Включено | Сжатие ответов для экономии трафика |
Безопасность Nginx
- Регулярно обновляй Nginx:
sudo apt update && sudo apt upgrade nginx - Используй fail2ban для защиты от брутфорса
- Настрой корректные права доступа к файлам конфигурации
- Отключай ненужные модули в сборке
- Используй Security Headers (как в примере выше)
Частые проблемы и их решение
Ошибка: "Address already in use"
Решение: Проверь, какой процесс использует порт 80 или 443:
sudo lsof -i :80
sudo lsof -i :443
Ошибка конфигурации после изменений
Решение: Всегда проверяй синтаксис перед перезагрузкой:
sudo nginx -t
Nginx не запускается после перезагрузки
Решение: Проверь логи для диагностики:
sudo journalctl -u nginx -f
sudo tail -f /var/log/nginx/error.log
Полезные команды для повседневной работы
# Просмотр активных конфигураций
ls -la /etc/nginx/sites-enabled/
# Просмотр логов в реальном времени
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
# Проверка загруженных модулей
nginx -V 2>&1 | grep --color 'module'
# Горячая перезагрузка (без разрыва соединений)
sudo systemctl reload nginx
# Полная перезагрузка
sudo systemctl restart nginx
# Проверка открытых портов
sudo netstat -tulpn | grep nginx
Поздравляю! Теперь ты знаешь не только как выполнить установку nginx, но и как настроить его для production-среды, обеспечить безопасность и мониторинг через Zabbix. Эти навыки критически важны для любого DevOps-инженера.
Помни: лучшая конфигурация — та, которая соответствует твоим конкретным требованиям. Начинай с базовых настроек, мониторь метрики и оптимизируй постепенно. Удачи в освоении Nginx!