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

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

Установка nginx на VPS: reverse proxy, виртуальные хосты и SSL
Блог MAATRIX · 2026-07-07

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

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Зачем 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 для сайта

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

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

nginx или Apache?

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

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

nginx -t перед reload.

Docker?

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