EQVPS

Как настроить обратный прокси nginx с HTTPS

Поставьте чистый домен и автоматический HTTPS перед любым приложением на локальном порту. Два способа: nginx с Certbot или Caddy для автоматического TLS в одну строку. Пошагово, с конфигом для копирования.

Большинство self-hosted приложений слушают локальный порт вроде 127.0.0.1:3000 и говорят по обычному HTTP. Обратный прокси стоит впереди на портах 80/443, терминирует HTTPS настоящим сертификатом и пересылает трафик на этот локальный порт — давая чистый https://app.yourdomain.com и позволяя держать несколько приложений за одним IP. Вот оба распространённых способа.

Предварительные требования

Вариант A — Caddy (автоматический HTTPS, одна строка)

sudo apt install -y caddy
echo 'app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl restart caddy

Вот и всё — Caddy получает сертификат Let's Encrypt для домена и обновляет его автоматически.

Вариант B — nginx + Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

Создайте /etc/nginx/sites-available/app:

server {
    listen 80;
    server_name app.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

Включите его и добавьте HTTPS:

sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.yourdomain.com

Certbot правит конфиг для отдачи HTTPS и настраивает авто-обновление.

Честные предостережения

Что дальше

Обратный прокси — это то, что позволяет одному серверу отдавать много всего — см. самостоятельный хостинг нескольких сервисов за одним IP. Запускаете приложение в контейнере? Начните с как установить Docker. Чтобы само приложение переживало перезагрузки и падения, см. как создать systemd-сервис.

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

Что такое обратный прокси и зачем он мне?

Ваше приложение обычно слушает локальный порт вроде 127.0.0.1:3000. Обратный прокси стоит впереди на портах 80/443, терминирует HTTPS и пересылает запросы на этот локальный порт. Он даёт вам чистый домен, валидный TLS-сертификат и возможность держать несколько приложений за одним IP — и ничего из этого приложению делать самому не нужно.

nginx или Caddy — что выбрать?

Caddy — самый быстрый путь: он сам получает и обновляет сертификаты Let's Encrypt, а рабочий HTTPS-прокси — это одна строка конфига. nginx известнее и гибче, но для TLS вы добавляете Certbot. Нужен HTTPS с минимумом возни — берите Caddy; уже знаете nginx или нужны его возможности — берите nginx.

Нужен ли мне домен?

Для доверенного HTTPS-сертификата — да: Let's Encrypt выдаёт сертификаты на доменные имена, а не на голые IP. Направьте A-запись на IP вашего сервера, дождитесь распространения DNS, и прокси сможет получить сертификат на это имя.

Какие порты нужно открыть?

80 и 443 на вход. Порт 80 используется для первичной проверки сертификата и редиректа на HTTPS; 443 отдаёт зашифрованный трафик. Откройте оба в файрволе (см. гайд по UFW) и убедитесь, что на них ничего другого уже не висит.

Почему выдача сертификата не удаётся?

Почти всегда DNS или порты. A-запись домена должна указывать на этот сервер и уже распространиться, а порты 80/443 быть достижимы (открыты в файрволе, не заблокированы выше). Исправьте эти две вещи — и выдача проходит; Caddy и Certbot оба повторяют попытки.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.