Настройка nginx + SSL для статического сайта на VPS: полное руководство

Nginx — это web-сервер, который проксирует запросы и отдаёт статические файлы. Для статического сайта на GitHub CMS он работает в самом простом режиме: принимает HTTPS-запросы, проверяет SSL-сертификат и возвращает готовый HTML-файл с диска. Никакого PHP, никакой базы данных, никакого FastCGI. TTFB ≤200ms достигается именно за счёт этой простоты — nginx не вычисляет страницу, он просто её отдаёт.

Nginx SSL настройка

Полная конфигурация nginx для GitHub CMS

server {
  listen 443 ssl http2;
  server_name example.com www.example.com;
  root /var/www/site/current;
  index index.html;

  # SSL от Let's Encrypt
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  # Безопасность
  add_header Strict-Transport-Security "max-age=63072000" always;
  add_header X-Content-Type-Options "nosniff" always;
  add_header X-Frame-Options "DENY" always;

  # Сжатие
  gzip on;
  gzip_types text/html text/css application/javascript image/svg+xml;
  gzip_min_length 256;

  # Статические файлы — кеш на 30 дней
  location /assets/ { expires 30d; add_header Cache-Control "public, immutable"; }
  location /images/ { expires 30d; add_header Cache-Control "public, immutable"; }

  # SPA fallback — все пути к index.html
  location / { try_files $uri $uri/ /index.html; }
}

# HTTP → HTTPS редирект
server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://$host$request_uri;
}

SSL через Let's Encrypt: 4 команды

1

Установка certbot

apt install certbot python3-certbot-nginx

2

Получение сертификата

certbot --nginx -d example.com -d www.example.com

3

Авто-обновление

certbot renew --dry-run — проверка. Сертификат обновляется автоматически каждые 60 дней.

4

Проверка

SSL Labs: A+ рейтинг для nginx с правильной конфигурацией.

Let's Encrypt SSL

CSP и HSTS: защита на уровне HTTP-заголовков

ЗаголовокЧто делаетnginx директива
HSTSЗапрещает HTTP — только HTTPS на 2 годаadd_header Strict-Transport-Security "max-age=63072000" always;
CSPОграничивает источники скриптов и стилейadd_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'" always;
X-Content-TypeБлокирует MIME type sniffingadd_header X-Content-Type-Options "nosniff" always;
X-Frame-OptionsЗапрещает встраивание в iframeadd_header X-Frame-Options "DENY" always;

🔑 Ключевые факты

≤200ms
TTFB на nginx с правильной конфигурацией
30d
Кеш статических файлов — мгновенная загрузка
A+
Рейтинг SSL Labs с HSTS + CSP
350 ₽
В месяц за VPS Hetzner/DigitalOcean

FAQ

Нужен ли мне отдельный сервер для nginx?

Нет. Nginx работает на том же VPS что и сайт. Для статического сайта на 50-200 страниц достаточно VPS за 350-500 ₽/мес (Hetzner CX22 или DigitalOcean $6). Nginx обслуживает десятки тысяч запросов в секунду без нагрузки.

Как часто нужно обновлять SSL-сертификат?

Certbot автоматически обновляет сертификат Let's Encrypt за 30 дней до истечения. Никаких ручных действий. Срок действия — 90 дней.

Настройте nginx + SSL за 30 минут

GitHub CMS Pro включает готовый nginx.conf и авто-деплой на VPS. Вам остаётся только заменить домен.