Більшість self-hosted застосунків слухають локальний порт на кшталт 127.0.0.1:3000 і говорять звичайним HTTP. Зворотний проксі стоїть попереду на портах 80/443, термінує HTTPS справжнім сертифікатом і пересилає трафік на цей локальний порт — даючи чистий https://app.yourdomain.com і дозволяючи тримати кілька застосунків за одним IP. Ось обидва поширені способи.
Попередні вимоги
- Домен з A-записом, що вказує на IP вашого сервера (дочекайтеся поширення DNS).
- Порти 80 і 443 відкриті — див. як налаштувати фаєрвол UFW.
- Застосунок працює локально, наприклад на
127.0.0.1:3000.
Варіант 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 і налаштовує авто-оновлення.
Чесні застереження
- DNS і порти — звичайні причини збою. A-запис має вказувати сюди й поширитися, а 80/443 бути досяжними, інакше видача сертифіката не вдасться. Обидва інструменти повторюють спробу, щойно це виправлено.
- Виставляйте лише те, що потрібно. Тримайте застосунок прив'язаним до
127.0.0.1, щоб він був доступний лише через проксі, а не напряму. - HTTPS потрібен домен, а не голий IP — Let's Encrypt видає на імена.
Що далі
Зворотний проксі — це те, що дозволяє одному серверу віддавати багато всього — див. самостійний хостинг кількох сервісів за одним IP. Запускаєте застосунок у контейнері? Почніть з як встановити Docker. Щоб сам застосунок переживав перезавантаження й падіння, див. як створити systemd-сервіс.
Коментарі
Поки немає коментарів. Будьте першим.