아....... 글 80% 작성 완료했는데 날아가서 새로 써야하네요.... 정말 속상합니다....
한 서버에서 여러 프로젝트를 돌려야 하는데 각 서브 도메인마다 ssl 인증 관리를 해주어야 해서 열심히 삽질을 한 결과 Nginx Proxy Manager(이하 npm, js 패키지 매니저 아님)를 사용하는게 가장 쉽고 편하다는 것을 깨닫게 되었다. 그리하여 docker compose를 사용하여 npm을 컨테이너로 실행하고 서브도메인별로 ssl 인증을 받는 과정을 정리해본다.
만약 ping: cannot resolve 도메인: Unknown host 와 같은 메시지가 나온다면 아직 적용이 안 된 것이니 5~10분 후에 다시 시도해보자.
3. Proxy Host 추가
Proxy Hosts에 접속하여 Add Proxy Host 버튼을 클릭한다.
4. proxy host detail 설정
항목 설명
Domain Names: 설정된 서브도메인 이름
Scheme: HTTP 프로토콜을 사용하여 요청을 전달
Forward Hostname / IP: 요청을 전달할 서버의 IP 주소
Forward Port: 요청이 전달될 서버의 포트 번호
Access List: 웹사이트나 애플리케이션에 접근할 수 있는 사용자 또는 IP 주소 리스트 설정
Cache Assets: 이미지, CSS, JavaScript등 정적 파일 캐싱 설정 여부
Block Common Exploits: SQL 인젝션, XSS(교차 사이트 스크립팅) 공격, 디렉터리 트래버설과 같은 흔히 알려진 웹 공격 기법에 대한 기본적인 보호 여부
Websockets Support: 웹소켓(WebSocket) 프로토콜을 사용하는 애플리케이션에 대한 프록시의 웹소켓 연결 지원 여부
웹소켓 프로토콜은 사용하지 않을 예정이라 굳이 설정해주지 않았다.
6. proxy host ssl 설정
SSL Certificate: 새로운 SSL 인증서를 요청하거나 기존 인증서를 사용하는 옵션 (Let's Encrypt 사용 가능)
Force SSL: HTTP 요청을 HTTPS로 강제 리다이렉트하도록 설정
HTTP/2 Support: HTTP/2 프로토콜 지원 옵션
HSTS Enabled: HSTS(HTTP Strict Transport Security)를 활성화하여 보안 강화(HTTPS를 통해서만 접근되도록)
HSTS Subdomains: 하위 서브도메인에 대해 HSTS 적용 여부를 설정하는 옵션(전체 도메인에 대한 HTTPS 보안을 일관되게 유지할 수 있도록)
Use a DNS Challenge: DNS 챌린지를 사용하여 SSL 인증서를 발급받을 때 사용하는 옵션(웹 서버에 직접 접근할 수 없는 경우나, 여러 도메인 또는 와일드카드(예: *.example.com) 인증서를 발급받을 때 사용)
Email Address for Let's Encrypt: Let's Encrypt SSL 인증서를 발급받기 위한 이메일 주소 입력
7. 프로젝트 접속
저장 후 설정한 도메인으로 접속이 가능한지 확인한다.
Ex) https://project1.aleph.kr로 접속
만약 접속이 되지 않는다면 project가 정상적으로 실행되고 있는지, 프로젝트 포트 번호가 열려있는지 다시 한 번 확인한다.
후기
여기저기 접속하지 않고 docker compose up 명령어 하나만으로 착착착 설정이 완료되게끔 만들고 싶어 대략 3일정도 삽질을 열심히 했으나 두뇌 회전량의 한계로 인해 실패하고 주변 개발자분께(감사합니다 명한님) 조언을 받아 npm을 사용하게 되었다. 근데 막상 사용해보니 생각보다 너무 간단해서 여태 삽질한게 어이없을 정도였다. 명확한 근거와 시행착오가 없는 고집은 스스로를 고립시킨다는 것을 다시금 깨닫게 되었다.