버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

문서의 도메인과 IP 주소는 모두 예시다. 실제 환경에 맞게 아래 변수를 먼저 정한 뒤 명령과 설정에 일관되게 적용한다.

0. 환경 변수 정리

항목예시설명
대표 도메인example.com사용자가 접속할 기본 주소
추가 도메인example.net같은 서버에서 운영할 다른 도메인
서비스 서브도메인app.example.com서비스별 주소가 필요할 때 사용
공인 IPv4 주소203.0.113.10인터넷에서 보이는 공유기 또는 방화벽 주소
리버스 프록시 주소192.168.10.1080·443 요청을 받는 내부 서버
백엔드 주소192.168.10.20실제 애플리케이션 또는 NAS 주소
백엔드 포트30060애플리케이션이 수신하는 내부 포트
ACME webroot/var/www/example-com-acmeHTTP-01 검증 파일을 둘 디렉터리
인증서 경로/etc/ssl/example.com인증서와 개인 키를 설치할 디렉터리

203.0.113.0/24는 문서 예시에 사용하는 주소 대역이다. 실제 설정에는 ISP나 네트워크 관리자가 제공한 공인 주소를 사용한다.

...

DNS는 도메인을 공인 IP로 안내할 뿐이다. 실제 접속에는 DNS, 인터넷 회선, NAT 또는 방화벽, 리버스 프록시, 백엔드 서비스가 모두 정상이어야 한다.

...


Mermaid
graph TB
    U["사용자 브라우저<br/

...

>HTTPS example.com"]
    DNS["Route 53<br/>A 레코드 

...

- 203.0.113.10"]
    GW["공유기 또는 방화벽<br/

...

>80 및 443 포트 전달"]
    RP["192.168.10.10<br/>TLS 종료 및 리버스 프록시"]
    APP1["192.168.10.20

...

 포트 30060<br/>서비스 A"]
    APP2["192.168.10.20

...

 포트 30061<br/>서비스 B"]

    U -->|

...

1 이름을 IP로 조회| DNS
    U -->|

...

2 공인 IP의 443에 연결| GW
    GW -->|

...

3 내부 프록시로 전달| RP
    RP -->|

...

4 Host 이름에 따라 분기| APP1
    RP -->|

...

4 Host 이름에 따라 분기| APP2


구간대표 증상
DNSNXDOMAIN, 조회 결과 없음, 잘못된 IP 반환
공인 회선·포트 전달연결 시간 초과
리버스 프록시연결 거부, TLS 오류, 기본 사이트 표시
백엔드 연결502 Bad Gateway, 503 Service Unavailable
애플리케이션 설정화면은 열리지만 로그인·CORS·리다이렉트 실패

문제가 생기면 위에서 아래 순서로 확인한다.

2. 사전 확인

...

정점 도메인과 www를 함께 운영하는 일반적인 예시는 다음과 같다.

이름타입TTL
example.comA203.0.113.10300
www.example.comCNAMEexample.com300
app.example.comA 또는 CNAME공인 IP 또는 대표 도메인300
  • 정점(apex) 도메인에는 일반 CNAME을 사용할 수 없으므로 공인 IPv4를 가리킬 때는 A 레코드를 사용한다.
  • www나 서비스 서브도메인은 대표 도메인을 가리키는 CNAME으로 관리할 수 있다.
  • 변경이 잦은 환경에서는 TTL을 300초 정도로 시작하고, 공인 IP가 안정적이면 늘린다.
  • 공인 IP가 주기적으로 바뀌는 회선은 Route 53 API를 이용한 DDNS 갱신을 검토한다.
  • 사용하지 않는 AAAA 레코드는 만들지 않는다.

...

공인 IP로 들어온 요청을 리버스 프록시 서버에 전달한다.

외부 포트내부 목적지용도
80/TCP192.168.10.10:80HTTP-01 검증 및 HTTPS 리다이렉트
443/TCP192.168.10.10:443HTTPS 서비스
  • 리버스 프록시의 사설 IP는 고정 IP 또는 DHCP 예약으로 유지한다.
  • 백엔드 포트는 인터넷에 직접 전달하지 않는다.
  • 서버 자체 방화벽에서도 80·443을 허용한다.
  • 관리용 SSH 포트는 필요하더라도 전체 인터넷에 그대로 노출하지 말고 VPN, 접근 허용 목록 또는 별도의 보안 통제를 사용한다.

...

각 도메인 또는 서브도메인마다 별도의 가상호스트를 만들고 다른 백엔드로 전달한다.

공개 주소내부 목적지 예시
example.com192.168.10.20:30060
example.net192.168.10.20:30061
app.example.com192.168.10.30:8080

모든 서비스는 같은 외부 443 포트를 사용할 수 있다. Apache가 TLS SNI와 Host 헤더를 기준으로 올바른 인증서와 백엔드를 선택하므로 서비스마다 공유기 포트를 추가로 열 필요가 없다.

...

리버스 프록시 설정만으로 애플리케이션의 공개 주소가 자동 변경되지는 않는다. 프레임워크와 서비스에 따라 다음 값을 실제 HTTPS 주소로 맞춘다.

설정 종류예시잘못되었을 때의 증상
공개 웹 Originhttps://example.com절대 URL이나 리다이렉트가 내부 주소를 사용
CORS 허용 Originhttps://example.com브라우저의 API 요청 거부
OAuth 기본 URLhttps://example.com로그인 후 잘못된 주소로 이동
허용 리다이렉트 목록https://example.comredirect_uri 검증 실패
Secure Cookie 설정HTTPS 및 프록시 인식로그인 세션이 유지되지 않음
Trusted Proxy리버스 프록시 주소만IP·스킴 인식 오류 또는 헤더 위조 위험

환경 변수 파일을 변경한 뒤에는 애플리케이션의 배포 방식에 맞게 컨테이너나 서비스를 재생성한다. 단순 재시작만으로 새 환경 변수가 반영되지 않는 플랫폼도 있다.

...

  1. 사용할 도메인, 공개 URL, 내부 백엔드 주소와 포트를 정한다.
  2. 새 독립 도메인이면 등록기관의 NS를 Route 53 호스팅 영역으로 위임한다.
  3. 기존 도메인의 서브도메인이면 기존 호스팅 영역에 A 또는 CNAME 레코드를 추가한다.
  4. DNS가 외부 리졸버에서 올바른 공인 IP로 조회되는지 확인한다.
  5. 최초 구성이라면 공유기에서 80·443을 리버스 프록시로 전달한다. 기존 프록시를 함께 쓰는 경우 보통 추가 포트 전달은 필요 없다.
  6. 백엔드 서비스를 시작하고 LAN에서 직접 응답을 확인한다.
  7. 리버스 프록시 설정을 백업한다.
  8. HTTP 가상호스트와 ACME webroot를 추가한다.
  9. 설정 검사를 통과시킨 뒤 HTTP 설정을 적용하고 챌린지 URL을 확인한다.
  10. 인증서를 발급하고 자동 갱신 후 재적재 명령을 설정한다.
  11. HTTPS 가상호스트와 백엔드 프록시 설정을 추가한다.
  12. 애플리케이션의 공개 URL, CORS, 쿠키, trusted proxy 설정을 바꾸고 재배포한다.
  13. OAuth, 웹훅 등 외부 공급자 콘솔의 URL을 변경한다.
  14. DNS부터 백엔드까지 전 구간을 외부 회선에서 검사한다.
  15. 함께 운영되는 기존 도메인과 인증서 자동 갱신도 회귀 검사한다.

11. 자주 발생하는 문제

증상가능한 원인과 확인 사항
Route 53에 레코드를 넣었지만 조회되지 않음등록기관의 NS 위임 누락, 잘못된 호스팅 영역 수정, DNS 전파 또는 캐시
일부 사용자만 접속 실패잘못된 AAAA 레코드, IPv6 방화벽·라우팅 미구성, 지역별 DNS 캐시
외부 연결이 시간 초과됨ISP 포트 차단, CGNAT, 이중 NAT, 공유기 또는 서버 방화벽, 잘못된 포트 전달
외부에서는 되지만 내부에서만 실패헤어핀 NAT 미지원. 내부 DNS에서 사설 IP를 반환하는 split-horizon DNS 검토
갑자기 도메인이 접속되지 않음유동 공인 IP 변경. 현재 공인 IP와 A 레코드를 대조하고 DDNS 검토
인증서 발급 실패DNS가 다른 IP를 가리킴, 80 포트 미도달, 챌린지 경로까지 리다이렉트·차단
인증서 설치 대상을 찾지 못함EC 발급 후 --ecc 누락 또는 인증서의 주 도메인 불일치
인증서 파일은 갱신됐지만 서비스 인증서는 만료됨갱신 후 Apache 재적재 명령 누락 또는 재적재 실패
새 가상호스트 추가 후 전체 재적재 실패문법 오류, 존재하지 않는 인증서 파일, 모듈 누락
예상과 다른 사이트가 표시됨ServerName·ServerAlias 오류, 요청 Host 불일치, 기본 가상호스트 순서
502 Bad Gateway백엔드 중지, 주소·포트 오류, 내부 방화벽, 컨테이너 포트 미게시
화면은 열리지만 로그인 실패공개 URL·CORS·쿠키·trusted proxy 설정 또는 공급자 콜백 URL 불일치
환경 변수 변경이 반영되지 않음서비스가 환경을 시작 시에만 읽음. 컨테이너 또는 서비스를 재생성해야 함
변경 후에도 브라우저가 이전 주소로 이동301 또는 HSTS 캐시. 시크릿 창과 명령줄 요청으로 분리 확인

12. 운영 권장 사항

  • 공인 IP 변경 감지와 Route 53 A 레코드 갱신을 자동화한다.
  • 인증서 만료일뿐 아니라 자동 갱신 명령의 성공 여부도 모니터링한다.
  • 리버스 프록시 설정 변경은 백업, 문법 검사, 무중단 재적재 순서로 적용한다.
  • 외부에는 80·443만 노출하고 백엔드와 관리 포트는 사설망 또는 VPN으로 제한한다.
  • 도메인별 백엔드 주소, 인증서 경로, 담당자, 외부 콘솔 등록 항목을 운영 문서에 기록한다.
  • 정기적으로 외부 DNS, TLS, HTTP 상태와 기존 서비스의 회귀 여부를 함께 검사한다.