MAATRIX / Блог / Установка nginx на VPS: от apt install до рабочего сайта

Установка nginx на VPS: от apt install до рабочего сайта

Блог MAATRIX · 2026-07-07

nginx — стандартный фронтенд для сайтов и API на VPS. Он принимает HTTPS, отдаёт статику и проксирует запросы на Node.js, Python или PHP-FPM. Показываем установку и базовую конфигурацию с нуля.

Зачем nginx на VPS

Приложения (Node, Gunicorn, PHP-FPM) слушают localhost на высоких портах. nginx — единая точка входа на 80/443: TLS, HTTP/2, сжатие, лимиты.

Один VPS может обслуживать несколько доменов через server_name — каждый виртуальный хост проксирует на свой backend или отдаёт статику.

nginx эффективно раздаёт файлы с диска без участия интерпретатора — CSS, JS, изображения грузятся быстрее и дешевле для CPU.

Конфигурацию держите в Git: /etc/nginx/sites-available под version control через etckeeper или симлинк на repo — rollback одной командой git checkout.

Статику версионируйте query string или hash в имени файла — тогда expires 1y без риска отдать старый JS после релиза.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

VPS для сайта

Установка

На Ubuntu/Debian:

apt update && apt install -y nginx
systemctl enable --now nginx

Проверка: curl -I http://ВАШ_IP — должен вернуть 200 и Server: nginx. Конфиги лежат в /etc/nginx/sites-available/, симлинки — в sites-enabled/.

Перед reload всегда nginx -t — синтаксическая ошибка не должна ронять рабочий сайт.

worker_processes auto; в nginx.conf подстраивает число workers под vCPU VPS — не настраивайте вручную без причины.

Кэширование fastcgi для PHP или proxy_cache для API GET endpoints снижает нагрузку — настройте cache_key и bypass для authenticated requests.

Виртуальный хост

Создайте /etc/nginx/sites-available/example.com:

server {
  listen 80;
  server_name example.com www.example.com;
  root /var/www/example;
  index index.html;
}

ln -s в sites-enabled/, nginx -t, systemctl reload nginx. DNS A-запись должна указывать на IP VPS до выпуска SSL.

access_log с buffer снижает disk I/O на высоком трафике; для debug временно включайте полный log на отдельном staging.

include snippets/ssl-params.conf — Mozilla intermediate profile для TLS cipher suites совместимости и безопасности.

Reverse proxy

Для API замените root на proxy_pass:

location / {
  proxy_pass http://127.0.0.1:3000;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
}

X-Forwarded-For и X-Forwarded-Proto нужны приложению для корректных redirect и rate limit по IP клиента, а не nginx.

Заголовок X-Content-Type-Options nosniff и Referrer-Policy добавляют базовую browser security без изменений в приложении.

map directive nginx маршрутизирует mobile subdomain или A/B test на разные upstream без изменения DNS.

Gzip и rate limit

gzip on; gzip_types text/css application/json application/javascript; — экономит трафик для SPA и API с JSON.

limit_req_zone + limit_req — базовая защита login-форм и публичных API от flood без WAF.

client_max_body_size 10m; — ограничьте upload, иначе один большой POST может забить диск логами.

При нескольких backend upstream используйте least_conn вместо round-robin, если запросы долгоживущие (SSE, long poll).

Stub status module nginx_status location internal — метрики active connections для Prometheus nginx exporter.

Безопасность

Скройте версию: server_tokens off;. Закройте доступ к dotfiles: location ~ /\. { deny all; }.

Только 80/443 наружу через UFW; backend-порты 3000, 8000, 5432 — localhost. fail2ban на nginx auth при необходимости.

Сertbot modify nginx config — сохраните backup перед первым запуском certbot --nginx, чтобы понимать diff.

Ошибки

  • 502 Bad Gateway — backend не слушает или упал.
  • 413 — client_max_body_size слишком мал.
  • Conflicting server name — дубли в sites-enabled.

Логи: /var/log/nginx/error.log и access.log — первый источник при отладке proxy.

При 502 проверьте curl http://127.0.0.1:PORT на самом VPS — так отделяете проблему backend от nginx и firewall.

Проверяйте конфиг после каждого deploy automation — ansible/chef иногда кладут broken include в sites-enabled.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

VPS для сайта

Частые вопросы

nginx или Apache?

nginx — reverse proxy и статика; Apache — .htaccess.

Проверка конфига?

nginx -t перед reload.

Docker?

Traefik/Caddy в compose; nginx на хосте — bare-metal классика.