여태까지 CheckChaek서비스를 AWS EC2의 퍼블릭 IPv4 주소로 사용해 왔다
Cloudflare Tunnel을 사용하여 EC2의 퍼블릭 IP가 직접 노출되지 않도록 우회하는 작업을 했다
기록용으로 간략하게 그 내용을 남김
호스팅케이알에서 도메인 구입
↓
Cloudflare에 도메인 등록
↓
호스팅케이알에서 도메인 네임서버를 Cloudflare에서 제공하는 네임서버로 변경
↓
EC2 ubuntu 서버에 cloudflared 설치
↓
터미널에서 cloudflare 로그인 진행 - 웹으로 인증

이때 cert.pem이라는 자격 파일이 생성됨
이후 순서 뒤죽박죽일 수 있음
터널 생성

↓
config.yml 파일 생성 및 설정
tunnel: 생성한 tunnel 아이디
credentials-file: 이전 과정에서 생성된 json 파일 전체 경로
ingress:
- hostname: 서브도메인주소
service: EC2 웹 서버 포트
- service: http_status:404
내 경우엔 아래와 같이 설정했다
tunnel: 5d*****-****-****-****-***
credentials-file: /home/ubuntu/.cloudflared/터널아이디.json
ingress:
- hostname: www.checkchaek.xyz
service: http://127.0.0.1:8080
- service: http_status:404
서버 포트를 127.0.0.1로 한 이유는

↓
Cloudflare 도메인 DNS에 CNAME 레코드 추가
사실 나는 헤매다가 터미널에서 DNS 루트를 어떻게 추가를 했는데 그래서 Content가 터널 아이디로 되어있다
이 과정 이후 터널 실행하고 도메인 접속해도 Error 1033 코드가 나왔는데 결국은 DNS 레코드 문제였다
내가 이해한 바로는 A레코드는 도메인과 EC2의 퍼블릭 IP를 바로 잇기 때문에, 우회하는 Cloudflare tunnel을 사용하려면 서브 도메인을 만들어 CNAME 레코드를 사용해야 하는 것이다


↓
터널 아이디를 run
아니면 간단하게
cloudflared tunnel run selinak
이렇게 터널 이름으로 실행해도 된다
근데 나중에 보니 이렇게 일반적으로 실행하면 터미널이 종료될 경우 터널도 종료되어 웹 접속이 끊긴다
그래서 찾아보니
nohup cloudflared tunnel run selinak
앞에 'nohup'을 붙이면 터미널이 닫혀도 터널은 계속 돌아간다
위의 모든 설정을 마쳤음에도 도메인 접속이 되지 않았다
문제는 AWS EC2 보안 그룹의 인바운드 규칙이었다
HTTP(80)와 HTTPS(443) 포트를 열었고, Anywhere IPv4로 허용해도 되지만 보안을 위해 Cloudflare의 IPv4 범위만 허용하도록 해당 값들을 일일이 지정했다
드디어 Cloudflare tunnel 통해 도메인 접속 성공
이제 도메인으로 접속하면 Cloudflare Tunnel을 거쳐 EC2의 웹 서버로 연결됨

사용자가 1명 늘어 조금 더 활성화가 된 쳌책 hahaha
'Back-end' 카테고리의 다른 글
nohup이 뭘까요 (0) | 2025.03.06 |
---|---|
네이버 로그인 애플리케이션 사전 검수 - 서비스 적용 형태 확인 캡처 방법 (0) | 2024.12.19 |
네이버 로그인 API 에러 중 '서비스 설정에 오류가 있어 네이버 아이디로 로그인할 수 없습니다' 해결방법 (0) | 2024.12.13 |
[AWS] 서버에 스프링부트 프로젝트 배포하기 (0) | 2024.12.05 |
[Spring Boot] STS에서 Maven프로젝트를 JAR 파일로 빌드하기 (0) | 2024.12.04 |