대부분의 자체 호스팅 앱은 127.0.0.1:3000 같은 로컬 포트에서 수신하며 평문 HTTP로 말합니다. 리버스 프록시는 앞단의 80/443 포트에 서서 진짜 인증서로 HTTPS를 종료하고 트래픽을 그 로컬 포트로 전달합니다 — 깔끔한 https://app.yourdomain.com을 주고 하나의 IP 뒤에서 여러 앱을 돌릴 수 있게 합니다. 여기 흔한 두 갈래가 있습니다.
전제 조건
- 서버의 IP를 가리키는 A 레코드가 있는 도메인(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 서비스 만드는 방법을 참조하세요.
댓글
아직 댓글이 없습니다. 첫 번째가 되세요.