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 обидва повторюють спроби.

Коментарі

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

Залишити коментар

Коментарі проходять модерацію перед публікацією.