EC2 도메인 연결 + HTTPS 적용하기
도메인은 가비아에서 구매
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 적용가능!
Author And Source
이 문제에 관하여(EC2 도메인 연결 + HTTPS 적용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@isg/EC2-도메인-연결-HTTPS-적용하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)