EQVPS

HTTPS를 갖춘 nginx 리버스 프록시 설정하는 방법

로컬 포트에서 수신하는 어떤 앱 앞에든 깔끔한 도메인과 자동 HTTPS를 둡니다. 두 갈래: Certbot과 함께하는 nginx, 또는 한 줄로 자동 TLS를 제공하는 Caddy. 단계별로, 복사해 쓸 수 있는 설정과 함께.

대부분의 자체 호스팅 앱은 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 모두 재시도합니다.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.