AWS를 이용해서 HTTPS 적용 후 HTTPS가 반영이 안될 때 확인 방법

Denia·2024년 2월 3일
0

TroubleShooting

목록 보기
16/25
post-custom-banner

현재 진행중인 사이드 프로젝트에 기본적인 구현들은 모두 구현되었다. (하루일과, 게시판은 구현 후 배포 완료)
물론 더 추가해야 될 게 많긴 하다 .. 😅

아무튼 이제는 슬슬 이력서도 뿌려야하니까 외부에서도 접속이 가능하게 만들어야 했다. (지금까지는 개인 IP로만 접속이 가능하게 했다.)
외부에서 접속할 때 http로 접속하면 안전하지 않은 url이라고 뜨다보니 아무래도 별로인 것 같아서, 빠르게 httphttps로 바꿔야겠다고 생각했다.


어떤 걸로 HTTPS를 적용할까 ?

let's encryptAWS 중에 고민을 했으나 AWS를 적용하기로 했다.

이유는 let's encrypt는 전에 해본 경험도 있고, Cloud 시대에 맞춰서 AWS 서비스를 써보면서 공부를 해야겠다고 생각했다. (다행히 프리티어 사용중이면 Route53이랑 Certificate Manager, ELB 사용시에 큰 비용이 따로 들지 않는다고 해서 사용하기로 한 것도 있다.)

분명히 HTTPS를 적용했는데, 자꾸 HTTP로 연결이 된다 ???

  • 구글에 검색하면 나오는 블로그를 참고하여, AWS Route 53, AWS Certificate Manager, AWS ELB를 사용해서 https를 적용했다.

  • 분명 순서대로 다 잘 따라했으는데도 불구하고 자꾸 https 적용이 안되고 자꾸 http로 연결이 되었다.

  • 무언가 잘못되었음을 인지했고, 이때부터 불안감이 엄습했다. (불안감의 원인으로는 지금까지 여러번 네트워크 관련된 이슈를 만날때마다 제대로 이슈 대응하는게 어려웠고, 특히나 AWS와 관련된 네트워크 이슈는 정말 문제 찾기가 어려웠 경험만 있어서 더 불안했다.)

  • 정말 엄청나게 특이한 케이스를 제외하면 AWS가 잘못되었을리는 없으므로, 내가 잘못세팅했을 것이라 생각하고 여러개의 다른 블로그 글들을 다시 처음부터 읽어보며 내가 무엇을 잘못했는지 확인하기 시작했다.

  • 블로그 글을 한 4~5개 읽으며 깨달은 건 나는 분명히 하라는대로 다 했고, 나 빼고 블로그 작성자분들은 다 정상적으로 된다는 것이었다.

  • 결국 스스로 결론 내리기로는 내가 잘못한건 없다고 판단했고 다른 이슈가 있을 것이라 생각했다.

  • 네트워크니까 결국 잘못연결된 부분이 있을 것이고 그 부분을 찾아서 해결을 하면 될 것이라고 생각하고 문제 점들을 하나 하나 확인하기로 했다.

문제를 찾아가는 과정

  1. 지금 도대체 어디서부터 문제인지 모르므로, 중간쯤을 잘라서 이분탐색으로 문제를 확인하기로 했다.

  2. 중간쯤에 해당하는 부분으로 적당한 부분은 이번에 설정한 AWS ELB로 판단했다.

  3. 지금 http로 뜨는게 AWS ELB를 타고 가서 http로 뜨는 것인지 아니면 그냥 도메인 주소가 EC2 public IP로 연결이 되어서 http로 뜨는 것인지를 확인하기로 했다.

  4. 그래서 AWS ELB의 도메인 주소를 찾아서 직접 해당 주소로 접근을 해봤다.

  5. AWS ELB로 연결을 하니 https로 정상적으로 접근이 되고, http로 연결시에 리다이렉트까지 정상적이었다. 물론 인증서는 도메인 주소가 다르므로 인증받지 못한 사이트라고 뜨기는 한다.

  6. 역시나 AWS 설정 부분은 문제가 없었다. AWS ELB부터는 정상적이므로 AWS ELB까지만 연결이 된다면 이 문제도 끝날 것이라 판단했다.

  7. 여기까지 오자 가장 먼저 든 생각은 네임서버의 반영 시간이었다. 아무래도 가비아를 쓰다가 AWS Route 53으로 바꾸고나서, 가비아에 새로 AWS 네임서버를 등록했는데 이게 반영되는데 시간이 오래 걸리는게 아닐까? 라고 추측이 되었다.

  8. 그래서 실제로 DNS 서버에 내 도메인 주소로 쿼리를 던졌을 때 무슨 IP를 주는지 확인하기로 했다.

  9. cmdbash에서 nslookup 명령어를 사용하면 DNS에서 무슨 IP를 주는지 확인 할 수 있다. (예시로 naver.com 을 던져봤다.)

  10. 기대하면서 내 도메인 주소를 던져보니, 역시나 아직 반영이 되지 않아서 그런지 기존에 가비아에 등록했던 EC2의 pulic IP를 주는 것이었다.

  11. 2시간의 고생이 드디어 끝을 내리는구나 싶어서 정말 기뻤다.

  12. 반영이 되기까지 마음 편하게 기다리다가, 다시 주소를 던져보니 이번엔 찾을 수 없다고 나왔다.
    그러나 실제로 내 도메인에 접속을 해보면 AWS ELB에 잘 연결이 되었는지 제대로 https로 접속이 가능했다.

아직 남은 문제

방금 12번에서 이야기한 주소를 찾지 못하는 경우는 무엇일까 ?

  • 내가 사용하고 있는 인터넷 회사의 DNS 서버에는 내 도메인에 대해서 등록이 되어있지 않아서 그렇다.
    • AWS ELB 도메인 주소를 요청하면 값을 잘 받아온다.
  • 인터넷 회사의 DNS 서버에 없다면, 다른 도메인 서버를 통해서 내 도메인에 대한 값을 받아오는 것 같았다.
    • nslookup을 사용할 때 도메인 주소 뒤에 DNS 서버 주소를 넣으면 해당 도메인 서버를 통해서 쿼리를 요청할 수 있다.
    • 제일 유명한 구글 DNS 서버 (8.8.8.8)로 요청을 보내봤더니, 역시나 제대로 값을 받아왔다.
      (구글 짱 👍👍)

해당 문제를 통해 배운점

  • DNS 서버의 역할이 무엇이고, 얼마나 중요한지 배울 수 있었다.

아직 또 남아 있는 문제

  • https를 적용하고 나서, api 요청들이 가끔씩 pending이 걸리고 제대로 요청이 가지 않았다. (자꾸 그러는것도 아니고 한번씩만 발생해서 문제의 원인에 대해서 감을 잡지 못했다.)
  • 계속해서 살펴보다 보니 GET 요청은 정상적인데, POST 요청에만 해당 문제가 발생한다는 것을 깨달았다.
  • 그리고 그때 갑자기 https 적용한다고 찾아보던 블로그 내용 중에 AWS ELB에서 http 요청을 https로 리다이렉트할 때, http redirect (Http status 301)을 사용하면 Http Method가 모두 GET으로 바뀐다고 적혀있던 내용이 생각이 났다.
  • 나도 내 코드를 확인을 해보니, axios 요청에 대해서 프로토콜을 http로 해놨었다.
  • 이 때문에 Tokenexpired 됐을 때 자동으로 refresh token를 하게 되는데, 해당 요청은 POST 요청이라서 http로 요청이 가면 redirect 때문에 GET 요청이 되고 GET 요청으로 정의된 refresh token api는 없으므로 pending 이후에 TimeOut이 발생했다.

axios의 요청 프로토콜을 https로 변경하고 나니까 모두 정상적으로 동작이 되었다.

해당 이슈 해결에 대한 출처 : EC2에 HTTPS 적용하기 # 리다이렉션 주의사항

profile
HW -> FW -> Web
post-custom-banner

0개의 댓글