Введение
Nginx — это высокопроизводительный веб-сервер и обратный прокси-сервер, который используется миллионами сайтов по всему миру. Благодаря асинхронной архитектуре Nginx способен обрабатывать тысячи одновременных подключений при минимальном потреблении ресурсов.
В этом руководстве мы рассмотрим полный процесс установки, настройки и оптимизации Nginx на Ubuntu.
Установка Nginx
Обновление системы
sudo apt update && sudo apt upgrade -yУстановка пакета Nginx
sudo apt install nginx -yЗапуск и автозагрузка
sudo systemctl start nginx
sudo systemctl enable nginxПроверка статуса
sudo systemctl status nginxОткройте в браузере http://your_server_ip — вы увидите стандартную страницу приветствия Nginx.
Основные файлы и директории
| Путь | Назначение |
|---|---|
/etc/nginx/nginx.conf | Главный конфигурационный файл |
/etc/nginx/sites-available/ | Конфигурации сайтов (доступные) |
/etc/nginx/sites-enabled/ | Конфигурации сайтов (активные) |
/var/www/html/ | Корневая директория по умолчанию |
/var/log/nginx/ | Логи доступа и ошибок |
Настройка виртуального хоста
Создание директории для сайта
sudo mkdir -p /var/www/mysite.ru/html
sudo chown -R $USER:$USER /var/www/mysite.ru/htmlСоздание тестовой страницы
nano /var/www/mysite.ru/html/index.html<!DOCTYPE html>
<html>
<head><title>Мой сайт</title></head>
<body><h1>Добро пожаловать на mysite.ru!</h1></body>
</html>Создание конфигурации виртуального хоста
sudo nano /etc/nginx/sites-available/mysite.ruserver {
```bash
listen 80;
listen [::]:80;
server_name mysite.ru www.mysite.ru;
root /var/www/mysite.ru/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Логи
access_log /var/log/nginx/mysite.ru.access.log;
error_log /var/log/nginx/mysite.ru.error.log;}
## Активация виртуального хоста
```bash
sudo ln -s /etc/nginx/sites-available/mysite.ru /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxУстановка SSL-сертификата (Let's Encrypt)
Установка Certbot
sudo apt install certbot python3-certbot-nginx -yПолучение сертификата
sudo certbot --nginx -d mysite.ru -d www.mysite.ruАвтоматическое продление
sudo certbot renew --dry-runCertbot автоматически добавляет задание в cron для продления сертификатов.
Настройка Nginx как обратного прокси
Для проксирования запросов на приложение (например, Node.js на порту 3000):
server {
```bash
listen 80;
server_name app.mysite.ru;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}}
# Оптимизация производительности
Отредактируйте `/etc/nginx/nginx.conf`:
```nginx
# Количество рабочих процессов (по числу ядер CPU)
worker_processes auto;
events {
```bash
worker_connections 2048;
multi_accept on;
use epoll;}
http {
# Сжатие
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml;
# Кэширование статики
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
# Буферы
client_body_buffer_size 16K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 8k;
# Таймауты
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;}
# Кэширование статических файлов
Добавьте в блок `server`:
```nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
```bash
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;}
# Базовая защита
```nginx
# Скрытие версии Nginx
server_tokens off;
# Защита от clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;
# Защита от XSS
add_header X-XSS-Protection "1; mode=block" always;
# Запрет MIME-sniffing
add_header X-Content-Type-Options "nosniff" always;
# Ограничение запросов (защита от DDoS)
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / {
```bash
limit_req zone=one burst=20 nodelay;}
# Полезные команды
```bash
# Проверка конфигурации
sudo nginx -t
# Перезагрузка без остановки
sudo nginx -s reload
# Просмотр логов в реальном времени
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
# Статистика активных подключений
curl http://localhost/nginx_statusЗаключение
Nginx — мощный и гибкий веб-сервер, который отлично подходит как для небольших сайтов, так и для высоконагруженных проектов. Правильная настройка виртуальных хостов, SSL, кэширования и защиты обеспечит стабильную и безопасную работу ваших веб-приложений.
💡 Совет: Для максимальной производительности Nginx используйте VPS с NVMe-дисками и достаточным объёмом RAM. Выбрать VPS для Nginx →