Web programming

SSL Termination 을 μœ„ν•΄ NginX 둜 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„ κ΅¬μΆ•ν•˜κΈ°

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 2. 20.

κ°œμš”

μ•žμ„  ν”„λ‘œμ νŠΈμ—μ„œ Active Mixed Content μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ λ°±μ—”λ“œ μ„œλ²„μ— HTTPS 톡신이 κ°€λŠ₯ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ SSL Termination 방식을 μ‚¬μš©ν•˜μ˜€κ³ , SSL Termination μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” 2κ°€μ§€κ°€ λŒ€ν‘œμ μ΄λΌλŠ” κ±Έ λ§μ”€λ“œλ ΈμŠ΅λ‹ˆλ‹€. 그쀑 μ „ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό ν™œμš©ν•˜μ—¬ 이λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

 

1. λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„ ν™œμš© : μ•„νŒŒμΉ˜ ν˜Ήμ€ NGINX λ₯Ό κ΅¬λ™μ‹œμΌœ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό λ§Œλ“€μ–΄  λ°±μ—”λ“œ μ„œλ²„μ— μš”μ²­μ΄ 였면 λ¨Όμ € λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„μ—μ„œ μ²˜λ¦¬ν•˜κ²Œ λœλ‹€. λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„μ—λŠ” Let's Encrypt κ°™μ€ TLS/SSL μΈμ¦μ„œλ₯Ό μ‰½κ²Œ κ°€μ Έμ˜€κ³  μ„€μΉ˜ν•  수 μžˆλŠ” CA(인증 κΈ°κ΄€)μ—μ„œ μ œκ³΅ν•˜λŠ” μΈμ¦μ„œλ₯Ό μ„€μ •ν•˜μ—¬ SSL Termination을 κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.
λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„μ—μ„œ HTTP μš”μ²­μ„ λ°›μœΌλ©΄ HTTPS μš”μ²­μœΌλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œν‚€κ³ , HTTPS μš”μ²­μ„ λ°›μœΌλ©΄ SSL Termination ν•œ ν›„ 평문 μš”μ²­μ„ Path λ§žλŠ” λ°±μ—”λ“œ μ„œλ²„μ— λΌμš°νŒ… ν•΄μ£Όκ²Œ λœλ‹€.
2. λ‘œλ“œλ°ΈλŸ°μ„œ ν™œμš© : λ°±μ—”λ“œ μ„œλ²„ μ•žμ— λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό 두어 νŠΈλž˜ν”½μ„ λ¨Όμ € λ‘œλ“œλ°ΈλŸ°μ„œκ°€ λ°›κ²Œ λœλ‹€.  λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„ 와 같이 HTTP둜 온 μš”μ²­μ€ HTTPS μš”μ²­μœΌλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œν‚€κ³ , λ‘œλ“œλ°ΈλŸ°μ„œμ—μ„œ SSL Termination ν•œ ν›„ 평문 μš”μ²­μ„ λ°±μ—”λ“œ μ„œλ²„λ‘œ λ³΄λ‚΄κ²Œ λœλ‹€. AWSλ₯Ό μ΄μš©ν•˜κ²Œ 되면 ACM을 톡해 μΈμ¦μ„œλ₯Ό λ°œκΈ‰ν•˜κ³ , ALB(Application Load Balancer = ELB) 에 μΈμ¦μ„œλ₯Ό μ„€μ •ν•΄μ£Όμ–΄ SSL Termination이 κ°€λŠ₯ν•˜λ‹€.

https://programmer-may.tistory.com/176

 

EC2에 HTTPS μš”μ²­ 보내기 1편 - (feat. Mixed Content μ—λŸ¬)

κ°œμš”μ΅œμ’…μ μœΌλ‘œ ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œμ˜ μž‘μ—…μ΄ λλ‚˜, Vercel에 배포된 ν”„λ‘ νŠΈμ—”λ“œ 배포 μ£Όμ†Œλ‘œ λ‚΄κ°€ λ§Œλ“  ν…ŒμŠ€νŠΈ μ„œλ²„μΈ EC2 μΈμŠ€ν„΄μŠ€λ₯Ό API μš”μ²­μ„ μ—°κ²° μ‹œμΌ°λ‹€. ν•˜μ§€λ§Œ μ—°λ™ν•˜μžλ§ˆμž μ—λŸ¬λ₯Ό λ§Œλ‚ 

programmer-may.tistory.com

(λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό ν†΅ν•œ SSL Termination 방식은 μœ„ λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.)

 

사전 μ…‹νŒ…

μ €λ²ˆ ν”„λ‘œμ νŠΈμ—μ„  ACM 와 λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό ν™œμš©ν•˜μ—¬ SSL Termination ν•΄κ²°ν–ˆκΈ° λ•Œλ¬Έμ— μ΄λ²ˆμ—” λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό μ΄μš©ν•˜μ—¬ SSL Termination 이 κ°€λŠ₯ν•˜κ²Œ ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

 

μš°λΆ„νˆ¬ 운영체제 EC2 μ„œλ²„ μ•žμ— NginX λ₯Ό ν™œμš©ν•˜μ—¬ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό κ΅¬μΆ•ν•˜κ³ , SSL/TLS μΈμ¦μ„œλŠ” Let's Encrypt μ—μ„œ λ°œκΈ‰ λ°›μ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 원격 μ„œλ²„ 접속 νˆ΄λ‘œλŠ” MobaXTerm 을 ν™œμš©ν•˜μ˜€κ³ , λ‹€μš΄λ‘œλ“œμ™€ EC2 접속은 μ•„λž˜ 제 λΈ”λ‘œκ·Έ 글을 μ°Έκ³ ν•΄ μ£Όμ„Έμš”.

https://programmer-may.tistory.com/173

 

CI/CD : GitHub Actions, EC2, RDSλ₯Ό ν™œμš©ν•œ μžλ™ 배포 νŒŒμ΄ν”„ 라인 κ΅¬μΆ•ν•˜κΈ° 2편

이번 글은 μ €λ²ˆκΈ€μ—μ„œ μ΄μ–΄μ§€λ‹ˆ μ €λ²ˆκΈ€μ„ 아직 보지 μ•Šμ€ 뢄듀은 μ €λ²ˆκΈ€μ„ μ½μ–΄μ£Όμ„Έμš”. https://programmer-may.tistory.com/172 GitHub Actions, EC2, RDSλ₯Ό ν™œμš©ν•œ μžλ™ 배포 νŒŒμ΄ν”„ 라인 κ΅¬μΆ•ν•˜κΈ° 1편 μ§€λ‚œλ²ˆ 혼

programmer-may.tistory.com

 

 

SSL/TLS μΈμ¦μ„œλ₯Ό λ°›κΈ° μœ„ν•΄μ„  일단 도메인이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. SSL/TLS μΈμ¦μ„œλŠ” 도메인 이름을 κΈ°μ€€μœΌλ‘œ λ°œκΈ‰λ˜λ©°, 이 μΈμ¦μ„œλ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ 신원을 ν™•μΈν•˜κ³  톡신을 μ•”ν˜Έν™”ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 인증 κΈ°κ΄€(Certificate Authority, CA)은 λ„λ©”μΈμ˜ μ†Œμœ κΆŒμ„ ν™•μΈν•˜κ³  ν•΄λ‹Ή 도메인에 λŒ€ν•œ μΈμ¦μ„œλ₯Ό λ°œκΈ‰ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„ ꡬ좕에 μ•žμ„œ 도메인을 λ¨Όμ € κ΅¬μž…ν•˜μ—¬ μ£Όμ„Έμš”. κ°€λΉ„μ•„λ‚˜ AWS Route53 을 톡해 도메인을 κ΅¬μž…ν•  수 있고, κ΅¬μž… 방법은 제 λ‹€λ₯Έ λΈ”λ‘œκ·Έ 글을 μ°Έκ³ ν•΄μ£Όμ„Έμš”.

 

λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„ ꡬ좕

EC2 에 NginX μ„€μΉ˜

λ¨Όμ € MobaXTerm μ΄λ‚˜ λ‹€λ₯Έ 원격 μ„œλ²„ μ ‘μ†νˆ΄μ„ μ΄μš©ν•˜μ—¬ AWS EC2 μΈμŠ€ν„΄μŠ€μ— μ ‘μ†ν•©λ‹ˆλ‹€. (μš°λΆ„νˆ¬ μš΄μ˜μ²΄μ œμ— λ§žλŠ” μ˜ˆμ‹œμ΄λ―€λ‘œ λ‹€λ₯Έ 운영체제λ₯Ό μ‚¬μš©ν•˜μ‹œλŠ” 뢄은 κ·Έ μš΄μ˜μ²΄μ œμ— λ§žλŠ” λͺ…λ Ήμ–΄λ‘œ μž…λ ₯ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.)

 

1. λ¨Όμ € μ„€μΉ˜ κ°€λŠ₯ν•œ νŒ¨ν‚€μ§€ λͺ©λ‘μ„ μ΅œμ‹ ν™” ν•΄μ€λ‹ˆλ‹€. (λͺ‡ 초 ~ λͺ‡ μ‹­μ΄ˆ μ†Œμš”)

$ sudo apt update

2. 그리고 μ—…λ°μ΄νŠΈκ°€ μ€€λΉ„λœ ν›„μ—” Nginxλ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€. 쀑간에 λ””μŠ€ν¬ μš©λŸ‰μ„ μ°¨μ§€ν•œλ‹€κ³  λ™μ˜ν•  꺼냐고 λ¬»λŠ” 말엔 Y λ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

 

$ sudo apt install nginx

 

 

 

3. μ„€μΉ˜κ°€ μ •μƒμ μœΌλ‘œ 끝났닀면 Nginx 버전 λͺ…λ Ήμ–΄λ₯Ό 톡해 μ„€μΉ˜κ°€ 잘 λλŠ”μ§€ 확인해 μ€λ‹ˆλ‹€.

μ„€μΉ˜ν•œ μ—”μ§μ—‘μŠ€μ˜ 버전이 잘 λ‚˜μ™”λ‹€λ©΄ μ •μƒμ μœΌλ‘œ λ‹€μš΄μ΄ 된 κ²ƒμž…λ‹ˆλ‹€.

$ nginx -v

 

  μ •상 μ„€μΉ˜κ°€ 됐닀면, μ΄λ ‡κ²Œ etc ν•˜μœ„ 폴더에 μ—”μ§„μ—‘μŠ€ 폴더가 생긴 κ±Έ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

4. λ³΄μ•ˆμ„ μœ„ν•΄ ubuntu의 ufw λ°©ν™”λ²½ 섀정을 톡해 νŠΉμ • 포트만 접속할 수 μžˆλ„λ‘ μ„€μ •ν•΄μ£Όκ² μŠ΅λ‹€.

$ sudo ufw enable              # ufw λ°©ν™”λ²½ μ‚¬μš©
$ sudo ufw allow ssh           # 22번 포트 ν—ˆμš©
$ sudo ufw allow 'Nginx Full'  # 80, 443번 포트 ν—ˆμš©

 

5. 잘 μ„€μ • λ˜μ—ˆλŠ”μ§€ 확인해 μ€μ‹œλ‹€.

$ sudo ufw status

 

 

ufw (Uncomplicated Firewall)λ₯Ό μ‚¬μš©ν•˜μ—¬ Nginx Full ν”„λ‘œνŒŒμΌμ„ μ„€μ •ν•˜λ©΄ HTTP와 HTTPS νŠΈλž˜ν”½μ„ ν—ˆμš©ν•˜κ²Œ λ©λ‹ˆλ‹€. 즉, Nginx Full ν”„λ‘œνŒŒμΌμ€ 포트 80 (HTTP)κ³Ό 포트 443 (HTTPS)을 λͺ¨λ‘ μ—΄μ–΄μ€λ‹ˆλ‹€.

μœ„μ™€ 같이 λ‚˜μ™”λ‹€λ©΄, 22번 포트, 80 포트, 443 ν¬νŠΈμ— λŒ€ν•œ 방화벽을 μ •μƒμ μœΌλ‘œ μ—΄μ–΄μ€€ κ²ƒμž…λ‹ˆλ‹€.

 

6. Nginxλ₯Ό μ‹€ν–‰ν•˜κ³  μƒνƒœλ₯Ό ν™•μΈν•΄μ€μ‹œλ‹€.

$ sudo systemctl start nginx

7. μ—”μ§„μ—‘μŠ€ μƒνƒœν™•μΈ

$ sudo systemctl status nginx

 

μœ„μ™€ 같이 active(running) 이 λ‚˜νƒ€λ‚œλ‹€λ©΄ μ •μƒμ μœΌλ‘œ μ—”μ§„μ—‘μŠ€ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„κ°€ κ΅¬λ™λœ κ²ƒμž…λ‹ˆλ‹€.

 

Let’s Encrypt와 Certbot을 μ΄μš©ν•΄ SSL μΈμ¦μ„œ μ μš©ν•˜κΈ°

Let's EncryptλŠ” 무료둜 SSL/TLS μΈμ¦μ„œλ₯Ό μ œκ³΅ν•˜λŠ” 인증 κΈ°κ΄€(CA)μž…λ‹ˆλ‹€. 인터넷 λ³΄μ•ˆ 연ꡬ κ·Έλ£Ή(ISRG, Internet Security Research Group)에 μ˜ν•΄ 운영되며, μ›Ήμ‚¬μ΄νŠΈ μ†Œμœ μžκ°€ μ›Ή νŠΈλž˜ν”½μ„ μ•”ν˜Έν™”ν•˜μ—¬ HTTPSλ₯Ό κ΅¬ν˜„ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

Certbot은 Let's Encryptμ—μ„œ μ œκ³΅ν•˜λŠ” SSL/TLS μΈμ¦μ„œλ₯Ό μžλ™μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€ μ†Œν”„νŠΈμ›¨μ–΄ λ„κ΅¬μž…λ‹ˆλ‹€. Certbot을 μ‚¬μš©ν•˜λ©΄ SSL μΈμ¦μ„œλ₯Ό μ‰½κ²Œ λ°œκΈ‰λ°›κ³  μ„€μΉ˜ν•˜λ©°, μžλ™μœΌλ‘œ κ°±μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

8. λ¨Όμ € μ„€μΉ˜ κ°€λŠ₯ν•œ νŒ¨ν‚€μ§€λ₯Ό λ‹€μ‹œ μ΅œμ‹ ν™” μ‹œμΌœμ£Όκ³ ,

$ sudo apt update

9. Certbot을 μ„€μΉ˜ν•©λ‹ˆλ‹€. 쀑간에 λ‚˜μ˜€λŠ” μš©λŸ‰ μ°¨μ§€ λ™μ˜λŠ” Y λ₯Ό μž…λ ₯ν•΄μ€λ‹ˆλ‹€.

$ sudo apt install certbot python3-certbot-nginx

 

10. Nginx ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ μΈμ¦μ„œλ₯Ό μƒμ„±ν•΄μ€λ‹ˆλ‹€.

$ sudo certbot --nginx

 

 

11. 그러면 λ°œκΈ‰μžμ— λŒ€ν•œ 이메일을 κ΅³λŠ” 창이 λ‚˜μ˜€λŠ”λ° 본인의 이메일을 μž…λ ₯ν•΄μ€λ‹ˆλ‹€. 이 μ΄λ©”μΌλ‘œ μΈμ¦μ„œμ˜ 만료 λ˜κΈ°μ „ μ•Œλ¦Ό μ΄λ©”μΌμ΄λ‚˜ κ°±μ‹ ν•˜λΌλŠ” μ•Œλ¦Ό 이메일이 였게 λ©λ‹ˆλ‹€.

 

 

12. κ·Έλ‹€μŒμ—” Let's Encrypt의 μ„œλΉ„μŠ€ 약관을 읽고 λ™μ˜ν•΄μ•Ό ν•˜λƒλŠ” 문ꡬ가 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. Let's EncryptλŠ” ACME(Automated Certificate Management Environment) μ„œλ²„μ™€μ˜ 등둝을 μœ„ν•΄ μ„œλΉ„μŠ€ 약관에 λ™μ˜ν•˜λŠ” 것을 μš”κ΅¬ν•©λ‹ˆλ‹€. λ™μ˜λ₯Ό ν•œλ‹€λ©΄ Certbot은 κ³„μ†ν•΄μ„œ SSL μΈμ¦μ„œλ₯Ό λ°œκΈ‰λ°›κΈ° μœ„ν•œ 절차λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.

μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄ λ™μ˜ ν•©λ‹ˆλ‹€. Y μž…λ ₯

 

 

13. κ·Έλ‹€μŒμ—” Let's Encrypt ν”„λ‘œμ νŠΈμ˜ 창립 νŒŒνŠΈλ„ˆμΈ μ „μž ν”„λ‘ ν‹°μ–΄ μž¬λ‹¨(Electronic Frontier Foundation, EFF)μ—μ„œ κ·€ν•˜μ˜ 이메일 μ£Όμ†Œλ₯Ό κ³΅μœ ν•  μ˜μ‚¬κ°€ μžˆλŠ”μ§€ λ¬»λŠ” 문ꡬ가 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€. λ™μ˜ν•˜κ²Œ 되면 Let's Encrypt ν”„λ‘œμ νŠΈμ™€ κ΄€λ ¨λœ μ†Œμ‹, 캠페인, 그리고 λ””μ§€ν„Έ 자유λ₯Ό μ§€μ›ν•˜λŠ” 방법 등에 λŒ€ν•œ 이메일을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. μ „ ꡳ이 받을 ν•„μš”κ°€ μžˆλ‚˜ μ‹Άμ–΄μ„œ Nλ₯Ό μž…λ ₯ν–ˆμŠ΅λ‹ˆλ‹€.

 

 

14. λ§ˆμ§€λ§‰μœΌλ‘œ μΈμ¦μ„œλ₯Ό 등둝할 도메인을 μž…λ ₯ν•˜λΌκ³  λ‚˜μ˜€λŠ”λ°, κ°€λΉ„μ•„ λ˜λŠ” AWS Route53μ—μ„œ λ“±λ‘ν–ˆλ˜ 도메인을 μž…λ ₯ν•˜λ©΄λ©λ‹ˆλ‹€.

μ•„λ§ˆ κ°€λΉ„μ•„ μ—μ„œ 도메인을 κ΅¬μž… ν›„ λ‹€λ₯Έ 처리λ₯Ό ν•˜μ§€ μ•Šμ€ μ‚¬λžŒλ“€μ€ 저와 같은 μ—λŸ¬λ₯Ό λ§Œλ‚˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€. ( AWS Route53 μ—μ„œ 도메인 κ΅¬μž… ν›„ ν˜ΈμŠ€νŒ… μ˜μ—­ λ“±λ‘κΉŒμ§€ λ˜μ—ˆλ‹€λ©΄ μ•„λ§ˆ μ—λŸ¬κ°€ λ‚˜νƒ€λ‚˜μ§€ μ•Šμ„ κ²λ‹ˆλ‹€. μ—λŸ¬κ°€ λ‚˜νƒ€λ‚˜μ§€ μ•Šμ€ 뢄듀은 μ•„λž˜ μ •μƒμ μœΌλ‘œ μ—”μ§„μ—‘μŠ€ μ„€μ • νŒŒμΌμ— μΈμ¦μ„œκ°€ certbot에 μ˜ν•΄ κ΄€λ¦¬λ˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” κ±Έ λ³΄μ‹œλ©΄ λ©λ‹ˆλ‹€.)

 

이 였λ₯˜ λ©”μ‹œμ§€λŠ” Let's Encrypt μΈμ¦μ„œ λ°œκΈ‰ κ³Όμ •μ—μ„œ 제 도메인 *******.store의 DNS 확인이 μ‹€νŒ¨ν–ˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒ 두 κ°€μ§€λ₯Ό μ„€μ •ν•΄μ•Όν•©λ‹ˆλ‹€. 

1. 도메인 A 및 AAAA λ ˆμ½”λ“œ 등둝

λ„λ©”μΈμ˜ A (IPv4) 및 AAAA (IPv6) λ ˆμ½”λ“œλ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€. A λ ˆμ½”λ“œλŠ” 도메인이 μ„œλ²„μ˜ IP μ£Όμ†Œλ₯Ό 가리킀도둝 ν•˜κ³ , AAAA λ ˆμ½”λ“œλŠ” IPv6 μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

2. λ„λ©”μΈμ˜ λ„€μž„μ„œλ²„ μƒνƒœ 확인

λ„λ©”μΈμ˜ λ„€μž„μ„œλ²„ 등둝 및 λ„λ©”μΈμ˜ λ„€μž„μ„œλ²„κ°€ μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜κ³  μž‘λ™ 쀑인지 확인해야 ν•©λ‹ˆλ‹€. λ„€μž„μ„œλ²„κ°€ μ œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•ŠμœΌλ©΄ λ„λ©”μΈμ˜ DNS μ‘°νšŒκ°€ μ‹€νŒ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

문제λ₯Ό ν•΄κ²°ν•΄ λ΄…μ‹œλ‹€.

λ¨Όμ € κ΅¬μž…ν•œ 도메인을 ν˜ΈμŠ€νŒ… μ˜μ—­ 등둝을 ν•΄μ€˜μ•Όν•©λ‹ˆλ‹€. AWS Route53 μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

ν˜ΈμŠ€νŒ… μ˜μ—­ 등둝과 λ ˆμ½”λ“œ 등둝은 제 λΈ”λ‘œκ·Έ λ‹€λ₯Έ 글에도 많이 λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€.

ν˜ΈμŠ€νŒ… μ˜μ—­μ„ λ“±λ‘ν•˜κ³  ν•΄λ‹Ή 도메인에 λ“€μ–΄μ˜€λ©΄ λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

 

λ¨Όμ € 도메인에 λŒ€ν•œ A λ ˆμ½”λ“œλ₯Ό λ“±λ‘ν•΄μ•Όν•©λ‹ˆλ‹€. λ„λ©”μΈμœΌλ‘œ 접속을 μ‹œλ„ν•  λ•Œ DNS μ—μ„œ μ–΄λŠ μ£Όμ†Œλ‘œ κ°€μ•Όν•˜λŠ” μ§€ μ„€μ •ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 

λ ˆμ½”λ“œ 생성을 눌러 A λ ˆμ½”λ“œλ₯Ό μƒμ„±ν•΄μ€μ‹œλ‹€.

 

값에 EC2 퍼블릭 IP μ£Όμ†Œλ₯Ό λ„£κ³  λ ˆμ½”λ“œ 생성을 λˆ„λ₯΄λ©΄ λ©λ‹ˆλ‹€.

 

κ·Έλ‹€μŒ 가비아에 λ“€μ–΄κ°€μ„œ ν˜ΈμŠ€νŒ… μ˜μ—­μ˜ Name Server λ₯Ό λ“±λ‘ν•΄μ€˜μ•Όν•©λ‹ˆλ‹€.

 

NS μœ ν˜• λ ˆμ½”λ“œλ₯Ό 클릭 해보면 4개의 λ„λ©”μΈμ˜ λ„€μž„μ„œλ²„κ°€ λ‚˜νƒ€λ‚˜λŠ” κ±Έ 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ°¨λ‘€λŒ€λ‘œ κ°€λΉ„μ•„μ—μ„œ λ°œκΈ‰ 받은 λ„λ©”μΈμ˜ λ„€μž„μ„œλ²„ μ„€μ •μ—μ„œ μ„€μ •ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

μœ μ˜ν•  점은 λ§ˆμ§€λ§‰ . 을 적지 μ•ŠλŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ 볡사 λΆ™μ—¬λ„£κΈ°λ₯Ό μΆ”μ²œ λ“œλ¦½λ‹ˆλ‹€.

(EX : ns-123*****.com.  이 μ•„λ‹ˆλΌ λ§ˆμ§€λ§‰ . 을 λΊ€ ns-123*****.com )

 

 

섀정이 μ™„λ£ŒλμœΌλ©΄ DNS μ „νŒŒλ₯Ό κΈ°λ‹€λ €μ•Όν•©λ‹ˆλ‹€. 

DNS μ „νŒŒ μ‹œκ°„ κ³ λ € - λ„€μž„μ„œλ²„ λ³€κ²½ 사항이 μ „νŒŒλ˜λŠ” 데 μ΅œλŒ€ 48μ‹œκ°„μ΄ 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€. λ³€κ²½ ν›„ 일정 μ‹œκ°„ κΈ°λ‹€λ €μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ €λŠ” ν•œ 10λΆ„ 이상은 κΈ°λ‹€λ Έλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μ›λžœ λ¨Όμ € μ„€μ •ν•˜κ³  μΈμ¦μ„œλ₯Ό λ°›λŠ” 게 νŽΈν•œ κ±Έ μ•Œμ•˜μ§€λ§Œ μ—λŸ¬κ°€ λ‚˜νƒ€λ‚˜λŠ κ±Έ 보기 μœ„ν•΄ 저도 μ„€μ • ν•˜μ§€ μ•Šκ³  μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

DNS 섀정이 μ˜¬λ°”λ₯΄κ²Œ μ „νŒŒλ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μ•„λž˜μ˜ 도메인 쑰회 도ꡬλ₯Ό μ‚¬μš©ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

https://www.whatsmydns.net/

 

DNS Propagation Checker - Global DNS Checker Tool

Instant DNS Propagation Check. Global DNS Propagation Checker - Check DNS records around the world.

www.whatsmydns.net

 

도메인 이름과 A λ ˆμ½”λ“œλ‘œ 검색을 해보면 X ν‘œμ‹œκ°€ λ‚˜νƒ€λ‚˜λŠ” κ±Έ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 아직 DNS μ „νŒŒκ°€ 이루어지지 μ•Šμ€ κ²ƒμž…λ‹ˆλ‹€. 저도 10λΆ„μ—μ„œ 20λΆ„ 기닀리고 λ‚˜μ„œ λͺ‡λͺ‡ λ‚˜λΌμ—μ„œ 초둝 체크λ₯Ό 받을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 초둝 체크 ν‘œμ‹œκ°€ 된 κ³³μ—λŠ” 도메인을 A μœ ν˜•μœΌλ‘œ κ²€μƒ‰ν–ˆμ„ μ‹œ μ œκ°€ μ„€μ •ν•΄λ‘” 퍼블릭 IP κ°€ λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

일단 ν•œκ΅­μ—μ„œ 초둝 체크가 λ‚˜νƒ€λ‚¬κΈ° λ•Œλ¬Έμ— λ‹€μ‹œ μΈμ¦μ„œ 등둝을 μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

15. μ—”μ§„μ—‘μŠ€ ν”ŒλŸ¬κ·ΈμΈμ„ μ΄μš©ν•œ μΈμ¦μ„œ 등둝을 ν•˜λ©΄ 쀑간 κΉŒμ§€ μ§„ν–‰ν–ˆλ˜ 과정듀은 μƒλž΅λ˜κ³  λ§ˆμ§€λ§‰μœΌλ‘œ μ‹€νŒ¨ ν–ˆλ˜ 도메인 등둝이 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€. DNS μ „νŒŒκ°€ 잘 μ΄λ£¨μ–΄μ‘Œλ‹€λ©΄ 도메인을 μž…λ ₯ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

$ sudo certbot --nginx

 

 

 

16. μ •μƒμ μœΌλ‘œ 진행이 λ˜μ—ˆλ‹€λ©΄ μ•„λž˜μ™€ 같이 Successfullyκ°€ λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

그리고 μΆ•ν•˜ 문ꡬ와 ν•¨κ»˜ ν•΄λ‹Ή 도메인에 HTTPS μš”μ²­μ΄ κ°€λŠ₯ν•˜λ‹€κ³  μ•Œλ €μ£Όκ²Œ λ©λ‹ˆλ‹€.

 

 

17. μ—”μ§„μ—‘μŠ€λ₯Ό μž¬μ‹œμž‘ν•˜κ³ , 

$ sudo systemctl restart nginx

18. μ •μƒμž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μƒνƒœλ₯Ό 확인해 μ€λ‹ˆλ‹€.

$ sudo systemctl status nginx

 

λ‹€μŒκ³Ό 같이 active(Running) 이 λ‚˜νƒ€λ‚œλ‹€λ©΄ μ •μƒμ μœΌλ‘œ κ΅¬λ™ν•˜κ³  μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

 

 

μ—”μ§„μ—‘μŠ€ μ„€μ • 파일 톺아보기

이젠 μ—”μ§„μ—‘μŠ€μ˜ μ„€μ • νŒŒμΌμ„ λ³΄κ² μŠ΅λ‹ˆλ‹€.

/etc/nginx/sites-available/default

/etc/nginx/sites-available/ 경둜둜 였면 default 파일이 μžˆλŠ” κ±Έ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이 νŒŒμΌμ€ Nginx μ„œλ²„μ˜ κΈ°λ³Έ μ„œλ²„ 블둝 섀정을 μ •μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ€ κΈ°λ³Έ μ›Ή μ„œλ²„ μ„€μ •, 가상 호슀트 μ„€μ •, SSL μ„€μ • 등을 ν¬ν•¨ν•˜κ³  있으며, μ„œλ²„κ°€ μˆ˜μ‹ ν•˜λŠ” μš”μ²­μ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν• μ§€ μ§€μ •ν•©λ‹ˆλ‹€.

 

 

νŒŒμΌμ„ μ—΄λžŒν•΄ 보면,

 

143 ~ 148 번 μ§Έ 쀄을 보면 μš°λ¦¬κ°€ μ„€μ •ν•΄μ€€  Let’s Encrypt의 Certbot 을 톡해 관리 되고 μžˆλ‹€λŠ” κ±Έ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ 이 νŒŒμΌμ„ 톡해 μ„œλ²„ 블둝을 μˆ˜μ •ν•˜μ—¬, μš”μ²­μ„ 왔을 μ‹œ μ–΄λ–€ path의 μš”μ²­μ΄λ©΄ μ–΄λ–€ api μ„œλ²„λ‘œ ν¬μ›Œλ”© 해쀄지 μ„€μ •ν•  μˆ˜μžˆμŠ΅λ‹ˆλ‹€. 

주석문을 톡해 μ–΄λ–»κ²Œν•˜λ©΄ μ„œλ²„μ™€ νŠΈλž˜ν”½ 섀정을 ν•  수 μžˆλŠ”μ§€ μ„€λͺ…이 λ‚˜μ™€μžˆμŠ΅λ‹ˆλ‹€.

이 μ„€μ • 파일 μˆ˜μ •ν•˜μ—¬ μ œκ°€ μ›ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ§Œλ“€λ©΄ λ©λ‹ˆλ‹€.

 

주석문을 μ œκ±°ν•˜κ³ , κ°„λ‹¨ν•œ μ˜ˆμ‹œλ₯Ό λ§Œλ“€μ–΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

server {
	server_name example.com;

	listen 443 ssl; # managed by Certbot
	ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
	ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
	include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
	ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    location / {
		proxy_pass http://localhost:8080;
        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;
	}
}

server {
	if ($host = example.com) {
       	return 301 https://$host$request_uri;
	} # managed by Certbot

	listen 80;
	server_name example.com;
	return 404; # managed by Certbot
}

 

  • server : 블둝을 톡해 HTTP (80)일 λ•Œμ™€ HTTPS (443)일 λ•Œ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  것인지 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • HTTPS μΌ λ•ŒλŠ” 8080포트의 API μ„œλ²„λ‘œ 보내고
    • HTTP μΌ λ•ŒλŠ” 301 Moved Permanently λ₯Ό μ‘λ‹΅ν•˜μ—¬ HTTPS둜 λ¦¬λ‹€μ΄λ ‰νŠΈν•©λ‹ˆλ‹€.
  • listen : μ–΄λ–€ 포트의 μš”μ²­μ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  것인지 λͺ…μ‹œν•©λ‹ˆλ‹€. (80 - http, 443 - https)
  • server_name : μ–΄λ–€ λ„λ©”μΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•  것인지 λͺ…μ‹œν•©λ‹ˆλ‹€. μ—¬λŸ¬ 개 지정도 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • location : μ–΄λ–€ path에 λŒ€ν•œ μš”μ²­μ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  것인지 λͺ…μ‹œν•©λ‹ˆλ‹€.
    • proxy_pass : ν•΄λ‹Ή μš”μ²­μ„ μ§€μ •ν•œ 경둜둜 ν¬μ›Œλ”©ν•©λ‹ˆλ‹€. (μŠ€ν”„λ§ μ„œλ²„λž‘ λ§€μΉ­ μ‹œμΌœμ€Œ)
    • proxy_set_header : ν¬μ›Œλ”© μ‹œμ˜ 헀더 값을 μ •μ˜ν•©λ‹ˆλ‹€. ($xxx κ°€ μΌμ’…μ˜ λ³€μˆ˜κ°€ 됨)
  • ssl_certificate, ssl_certificate_key : SSL μΈμ¦μ„œ 및 λΉ„λ°€ν‚€ 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • include : νŠΉμ • 파일의 섀정을 λΆˆλŸ¬μ˜΅λ‹ˆλ‹€. (μ—¬κΈ°μ„œλŠ” options-ssl-nginx.conf λ₯Ό 톡해 SSL κ΄€λ ¨ 섀정을 뢈러옴)
  • ssl_dhparam : μ•”ν˜Έν™” λ³΅μž‘λ„λ₯Ό λ†’μ—¬μ£ΌλŠ” λ””ν”Ό ν—¬λ§Œ νŒŒλΌλ―Έν„°λ₯Ό μ„€μ •ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•©λ‹ˆλ‹€.

λŒ“κΈ€