Перейти к содержимому
Не упустите специальную скидку 20% для новых клиентов! Промокод: KAVESNET20 Скопировано
Nginx

Установка Nginx и настройка Reverse Proxy: гид

Установка Nginx с нуля, настройка virtual host, reverse proxy для Node.js / PHP-FPM. Производительность и безопасность.

Команда KavesNET 23 октября 2025 г. 3 мин чтения
Nginx reverse proxy

Используете Nginx вместо Apache или хотите поставить reverse proxy перед Node.js / Python / Docker-приложением? Вы по адресу. Nginx работает примерно на 35% современных веб-серверов — асинхронная архитектура потребляет гораздо меньше ресурсов, чем Apache. В гиде — установка, vhost и reverse proxy шаг за шагом.

Требования

  • Ubuntu 22.04 / Debian 12 (для AlmaLinux — dnf)
  • Root-доступ
  • Порты 80, 443 открыты (пост UFW)

1. Установка Nginx

sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo systemctl status nginx

Откройте http://vds-ip — должна быть default-страница Nginx.

2. Конфликт с Apache

Если Apache уже работает, Nginx не стартует (конфликт порта 80):

sudo systemctl stop apache2
sudo systemctl disable apache2

Или перенести Apache на 8080 (продвинуто).

3. Первый virtual host

sudo nano /etc/nginx/sites-available/ваш-сайт.com
server {
    listen 80;
    listen [::]:80;
    server_name ваш-сайт.com www.ваш-сайт.com;
    root /var/www/ваш-сайт.com;
    index index.html index.php;

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

    # PHP-FPM (для WordPress)
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    }

    # Длинный кэш для статики
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    access_log /var/log/nginx/ваш-сайт.com_access.log;
    error_log /var/log/nginx/ваш-сайт.com_error.log;
}

Активировать:

sudo ln -s /etc/nginx/sites-available/ваш-сайт.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

4. Reverse proxy перед Node.js / Docker

Node.js работает на порту 3000. Nginx на 80/443:

server {
    listen 80;
    server_name app.ваш-сайт.com;

    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;
    }
}

Плюсы:

  • Поддержка WebSocket (proxy_http_version 1.1 + Upgrade)
  • SSL-терминация (Let’s Encrypt на Nginx, app остаётся HTTP)
  • Статика отдаётся Nginx (не нагружает Node.js)

5. SSL (Let’s Encrypt)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ваш-сайт.com -d www.ваш-сайт.com

Подробно: пост Let’s Encrypt.

6. Тюнинг производительности

/etc/nginx/nginx.conf:

worker_processes auto;
worker_connections 4096;

client_body_buffer_size 10K;
client_max_body_size 50m;
large_client_header_buffers 4 8k;

gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss image/svg+xml;

listen 443 ssl http2;
sudo nginx -t && sudo systemctl reload nginx

7. Заголовки безопасности

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Тест: https://securityheaders.com/

8. Rate limiting

# nginx.conf, http-блок
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

# server-блок
location /api/ {
    limit_req zone=mylimit burst=20 nodelay;
    proxy_pass http://localhost:3000;
}

Подробно про DDoS: пост DDoS.

9. Управление логами

sudo tail -f /var/log/nginx/ваш-сайт.com_access.log
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
sudo grep " 404 " /var/log/nginx/access.log | tail -20

logrotate уже сконфигурирован.

Частые ошибки

  • “bind() to 0.0.0.0:80 failed”: Apache работает → остановите
  • “502 Bad Gateway”: backend упал → systemctl status node-app
  • “413 Request Entity Too Large”: увеличьте client_max_body_size
  • “504 Gateway Timeout”: добавьте proxy_read_timeout 300s;
  • PHP не работает: PHP-FPM запущен? sudo systemctl status php8.3-fpm

Nginx vs Apache

NginxApache
Архитектураasync, event-drivenprocess-based
Ресурсыменьше RAM/CPUбольше
Статикаочень быстробыстро
.htaccess
Reverse proxyнативночерез mod_proxy

Оба годятся для WordPress; под высокой нагрузкой Nginx эффективнее.

Итог

Nginx — краеугольный камень современного веб-стека. На одном VDS — несколько сайтов + reverse proxy + SSL-терминация. VDS KavesNET оптимизирован под Nginx.

По теме: Ручная установка WordPress · Cloudflare CDN

Теги Nginx Reverse Proxy Linux Туториал

Похожие статьи

Возможно, вас также заинтересует.