- Route 53으로 도메인 구매 → AAAA 레코드와 A레코드 설정 (EC2 연결)
- nginx 설치 후 nginx 에서 ssl 인증 받기
- 443 포트 열렸으면 안에서 443 포트를 포트 포워딩을 통해서 tomcat = 8080 port로 연결 (proxy pass)
AWS에서 Nginx의 활용
- nginx는 다양한 기능이 있을 테지만, 현재의 조건에서는 입력된 포트를 다른 포트로 리다이렉트 하는 역할로 사용한다. listen -> location
/etc/nginx/nginx.conf
server {
listen 80;
listen [::]:80;
server_name doreview.ga
location /{
proxy_pass http://localhost:8080;
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;
}
- nginx 의 conf 파일이다. conf 파일을 보면 listen이 있다. doreview.ga:80(doreview.ga)로 접근할 경우 location으로 이동한다는 의미이다. location의 코드는 지역의 8080으로 이동하는 것이며, 현재 어플리케이션이 작동중인 포트이다.
Let's Encrypt의 설치 및 설정
- Let's Encrypt의 설치의 기본적인 도구는 certbot이다.내가 성공한 certbot 설치 과정은 아래와 같다. Certbot의 종속성에 필요로 한 EPEL7 저장소를 설치한 후 certbot을 설치한다.
cd /home/ec2-user
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
sudo yum-config-manager --enable epel*
sudo yum repolist
sudo yum install -y certbot
sudo yum install certbot-nginx
sudo service nginx stop
sudo certbot --nginx
참고 : https://flamingotiger.github.io/backend/devOps/aws-linux2-certbot-nginx/#lg=1&slide=2
- 여기서 nginx의 설치 과정에 문제가 발생했다. 설치 과정에서 domain을 요구할 때, savemecadet.click을 입력해도 작업이 진행 되지 않았다. 그래서 아래의 코드를 대신하여 domain을 설정할 수 있었다.
- www.savemecadet.click 도 적어줘야했음..
sudo certbot --nginx -d savemecadet.click -d www.savemecadet.click
- 어떤 경우, certbot의 설치만으로도 nginx의 conf 설정을 자동으로 해준다고 한다. 나의 경우 그렇지 않았다. /etc/nginx/nginx.conf 을 아래와 같이 직접 수정했다.
aws Route 53
- aaaa recode 와 a 레코드 설정
- a 레코드는 ipv4 주소 aaaa 레코드는 ipv6 주소인데 ipv4 변형 하면됐음
nginx 설정 파일 수정
- nginx를 통해 포트의 흐름을 변경해야 한다. 우리가 해야할 것은 80포트를 433(https)으로 리다이렉트 해야하며, 433을 8080으로 리다이렉트 해야 한다.
- 먼저 80 -> 433을 해보자.
server {
listen 80;
listen [::]:80;
server_name doreview.ga
listen 443 ssl; # managed by Certbot
root /var/www/html;
# RSA certificate
ssl_certificate /etc/letsencrypt/live/doreview.ga/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/doreview.ga/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
- 위의 코드에서 핵심은 $scheme != "https" 이다. https가 아니면 https로 리다이렉트 한다.
- 그 다음 과정은 433(https) -> 웹 어플리케이션(8080)이다. 그 코드는 아래와 같다.
# SSL configuration
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name doreview.ga
listen 443 ssl; # managed by Certbo
root /var/www/html;
ssl_certificate /etc/letsencrypt/live/doreview.ga/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/doreview.ga/privkey.pem;
# Required for LE certificate enrollment using certbot
include /etc/nginx/default.d/*.conf;
location /{
proxy_pass http://localhost:8080;
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;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}