EC2 도메인 연결 + HTTPS 적용하기

13643 단어 환경설정ec2ec2

도메인은 가비아에서 구매

1. 도메인 연결 - Nginx설치

참고 링크
[Nginx] Nginx와 SpringBoot 내장 Tomcat 연동

현재 프로젝트에서는 미리 githubAction으로 ci/cd를 구축해서 /home/ubuntu/deploy에 스프링부트 jar파일이 실행되고 있는 상황입니다.

Nginx 설치

#nginx 설치
sudo apt-get install nginx

#nginx 실행
sudo service nginx start

#---------이외 명령어--------
#상태확인
sudo service nginx status 
#중지
sudo service nginx stop
#재시작
sudo service nginx restart
#설정 다시 반영
sudo service nginx reload

Nginx 실행 확인

  • 자신의 ip:80 으로 들어갔을 때 Welcome to Nginx 화면이 뜨면 성공

nginx.conf 확인

  • nginx.conf는 Nginx의 메인 파일이다. /etc/nginx 경로에 위치하고 있다.
#conf 파일이 있는 곳으로 이동
cd /etc/nginx

#nginx.conf 확인
cat nginx.conf


conf 파일 - http 블록 내에 해당 내용이 존재

sites-enabled 디렉토리의 파일을 수정해야 한다.

이유는 참조한 블로그 참조.
간단히 말하면 conf 파일에서 site-enabled 폴더에 있는 파일들을 include해서 실행하기 때문이다.

sites-available에 설정파일 생성 및 적용

#디렉토리 이동
cd /etc/nginx/sites-available
#새롭게 적용시킬 conf 파일 생성
sudo vi test.conf

test.conf

server {
    listen 80;
    listen [::]:80;

    server_name 구매한 도메인명; 

    location / {
         proxy_pass http://localhost:9000;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $http_host;
    }
}
  • server_name: 구매한 도메인 명 혹은 구매하지 않은 경우 localhost라고 입력
  • proxy_pass http://localhost:{port}: location 바로 밑에 있는 명령어 리다이렉트 할 포트 번호를 적는다. 현재 프로젝트 server port는 9000번으로 했기 때문에 9000으로 지정했다.


테스트 url을 입력했을 때, 성공 시 확인할 수 있다.

sites-enabled에 심볼릭 링크 만들기

  • sites-available디렉토리에 test.conf 파일을 새로 만들어줬기 때문에 연결을 시켜줘야 한다.
#심볼릭 링크 연결
sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled

# 연결 목록 확인
cd /etc/nginx/sites-enabled
ls -l

# default 연결을 끊어줘야 test.conf 사용이 가능하다.
sudo rm default

# default 파일을 삭제한게 아니라 연결을 끊은거여서 
#sites-available 디렉토리에 보면 default 파일은 존재함!
#만약 망했다 싶으면 test.conf 연결 지우고 default로 다시 연결시켜주면 됨

#nginx 재구동 및 확인
sudo service restart 
또는
sudo service reload

#구매한 도메인/test url 로 입력했을 때 출력 값이 제대로 나오면 성공

#안될 시 확인해볼 것
1. ec2 인바운드 설정 확인
2. 리다이렉트하는 포트번호 제대로 설정했는지 확인
3. root 프로젝트 위치를 지정하는 방법도 있는데 다른 글을 보고 참고하면 좋을듯...

2. 서브 도메인 설정하기

참조 링크
[Nginx][EC2] 도메인 연결, https 적용, 서브도메인 설정

가비아→ My가비아→ DNS관리툴

  • 파란색은 도메인, 검정색은 ip주소
  • 서브 도메인의 경우 CNAME타입으로 설정해야 한다.
  • 값/위치에서 도메인 이름 뒤에 .을 붙여줘야 한다.

ec2 서브 도메인 적용

cd /etc/sites-enabled

sudo vi test.conf

test.conf 파일 → server_name을 수정한다.

server {
    listen 80;
    listen [::]:80;

    server_name teamplanz.shop; 

    location / {
         proxy_pass http://localhost:9000;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $http_host;
    }
}
sudo service nginx restart

sudo service nginx status
서버 돌아가는 지 확인


url을 가렸지만 성공!

3. HTTPS 적용하기

참고 링크
LetsEncrypt 설치

[Nginx][EC2] 도메인 연결, https 적용, 서브도메인 설정

※ 시작 전 주의 사항

  • ec2 인바운드에 https 열어뒀는지 확인!!!

Certbot 설치

#certbot 설치
sudo snap install certbot --classic

SSL 인증서 발급 (standalone 방식)

  • 인증서 발급 방식에는 standalone과 webroot 방식이 존재한다.

  • standalone 방식의 경우에는 인증서를 발급하기 전에 웹서버를 꺼야하는 단점이 있지만
    서브도메인에도 적용이 가능하다는 장점이 있다.

  • webroot 방식은 첫번째 블로그에 정리되어있음 필요 시 그대로 사용하면 된다.

  • ** 표시한 명령어 입력하기


#standalone 방식 사용할거기 때문에 nginx 잠시 꺼줘야 한다.
sudo service nginx stop

sudo certbot certonly --standalone      
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enter email address (used for urgent renewal and security notices)
 **(Enter 'c' to cancel):  (자기 이메일 적기)**

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
생략
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
**(Y)es/(N)o: Y <- ACME 약관에 동의하는지 N선택시 진행불가**

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
생략
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N <- 이메일을 통해 Let's Encrypt 프로젝트 정보를 받아볼지

Please enter in your domain name(s) (comma and/or space separated)
(Enter 'c' to cancel): 도메인1 도메인2  <- {1} 인증서를 발급할 도메인 입력
Requesting a certificate for vompressor.com and www.vompressor.com

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/도메인명/fullchain.pem <- {2} 발급된 인증서 경로
   Your key file has been saved at:
   /etc/letsencrypt/live/도메인명/privkey.pem <- {2} 발급된 인증서 경로
   Your certificate will expire on 2021-05-16.
   
   생략
  
 #SSL 인증서 발급 끝나면 다시 nginx 시작해주기
 sudo service nginx start
 #정상 실행 됐는지 확인
 sudo service nginx status
 
 
 #필수는 아님
 cd /etc/nginx/sites-enabled
 vi test.conf
 #conf 파일 확인해보면 자동으로 443포트 연결해준거를 볼 수 있다.
  • 입력 외의 내용은 생략했다.

  • <-{1} 표시 된 걸 보면 여러 개의 도메인의 인증서를 발급 받고 싶은 경우 띄어쓰기로 구분해서 도메인을 작성해주면 된다.

  • 이 때 sites-enabled에 작성한 도메인들만 적어줘야 함!

    현재 프로젝트의 경우에는 dev 서브 도메인만 conf 파일에 작성해줬기 때문에
    dev.도메인명 에만 SSL 인증서를 받았다!

인증서 삭제

  • 나는 삭제를 했었는데 포트를 안열어줘서 연결이 안된거였음
  • 아마 포트 열고 standalone으로 적용했다면 바로 적용될 듯?
#만약 위에 설치했는데 적용안되면 인증서 삭제 후 다시 발급
#인증서 이름은 도메인명 적으면 된다.
certbot revoke --cert-name {인증서 이름}

#SSL 발급받은 도메인 확인하고 싶은 경우
cd /etc/letsencrypt/

#live 디렉토리는 sudo 권한만 들어갈 수 있음
sudo su
cd live
ls
#여기에 발급받은 도메인들 있을텐데 certbot revoke 명령어로 지워주면 된다.

인증서 발급 - 2

2번째 방법...

sudo certbot --nginx -d domain.com -d www.domain.com

#-d로 구분해서 도메인 여러개 지정해줄 수 있다. 

  • 명령어 치고 위와 같은 문구 나오면 2라고 치기!
  • 2번으로 적용해야 자동으로 https로 리다이렉트 해준다!!

주의사항 다시 정리

  • 프로젝트에 테스트 해볼 api 하나 꼭 만들어두기!!!
  • 포트 열어두기!!
  • 주의사항은 아니지만 다른 서브 도메인 추가로 연결했다면 인증서 발급 명령어 써줘야 https 적용가능!

좋은 웹페이지 즐겨찾기