Установка Nginx
На Ubuntu/Debian установите Nginx:
sudo apt update && sudo apt install nginx
После установки Nginx запустится автоматически и будет слушать порт 80. Проверьте статус:
sudo systemctl status nginx
Откройте IP сервера в браузере — вы должны увидеть стандартную страницу Nginx. Если используете файрвол UFW, разрешите HTTP и HTTPS:
sudo ufw allow 'Nginx Full'
На этом этапе Nginx работает как обычный веб-сервер и отдаёт статику из
/var/www/html/.Конфигурация server block
Создайте файл конфигурации для вашего домена:
sudo nano /etc/nginx/sites-available/yourdomain.com
Базовая структура конфига:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}Активируйте конфигурацию и проверьте:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Настройка proxy_pass
Директива
proxy_pass указывает, куда Nginx перенаправляет запросы. Полный пример блока location с правильными заголовками:location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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_set_header Connection "";
}Без этих заголовков ваше приложение не будет знать реальный IP клиента и протокол (HTTP/HTTPS). Заголовок
X-Forwarded-Proto особенно важен если приложение генерирует URL — без него ссылки будут http вместо https.SSL через Let's Encrypt и Certbot
Установите Certbot:
sudo apt install certbot python3-certbot-nginx
Запустите получение сертификата:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot автоматически изменит конфигурацию Nginx, добавив блок для HTTPS (порт 443) и редирект с HTTP. Убедитесь, что домен уже указывает на IP вашего сервера — Certbot проверяет владение доменом через HTTP-запрос. Сертификаты Let's Encrypt действуют 90 дней, но Certbot при установке настраивает автоматическое обновление через systemd-таймер или cron.
Автообновление сертификатов
Проверьте, что таймер обновления активен:
sudo systemctl status certbot.timer
Для ручной проверки используйте:
sudo certbot renew --dry-run
Если всё работает — сертификаты будут обновляться автоматически за 30 дней до истечения. На случай проблем полезно добавить post-hook для перезагрузки Nginx после обновления: в файле
/etc/letsencrypt/renewal/yourdomain.com.conf добавьте renew_hook = systemctl reload nginx. Следите за почтой, указанной при регистрации в Certbot — Let's Encrypt присылает уведомления, если сертификат скоро истекает и не был обновлён.