Установка nginx на VPS: от apt install до рабочего сайта
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 классика.