https://www.nuschool.co.kr/study/aws%ec%97%90-%ec%8a%a4%ed%94%84%eb%a7%81-%eb%b6%80%ed%8a%b8-3-%ea%b2%8c%ec%8b%9c%ed%8c%90-%eb%b0%b0%ed%8f%ac%ed%95%98%ea%b8%b0/

지난 포스팅에서 AWS에 스프링 부트 3 게시판을 배포해보았다. 그런데 지금 이 상태에서는, EC2 인스턴스의 IP를 입력하고 거기에 :8080을 입력해야 접속할 수 있는 불완전한 형태다.

일반적인 웹 사이트는 HTTP/HTTPS로 접속한다. 보통 정상적인 웹 사이트는 HTTPS로 접속을 한다.

HTTP/HTTPS에 대한 개념은 아래를 참고하자

https://www.cloudflare.com/ko-kr/learning/ssl/why-is-http-not-secure

HTTPS(80 포트)로 웹 서비스 운영하기

80번 포트로 엔진엑스(Nginx)나 아파치(Apache)와 같은 웹 서버를 사용해 80번 포트로 웹 서비스를 제공하려고 한다.

엔진엑스는 높은 성능을 위해서 개발된 웹 서버로, 설정이 간단하고 쉽게 사용할 수 있다.

EC2에 SSH로 접속해서 루트 권한으로 엔진엑스를 설치하자.

sudo apt install nginx

cd /etc/nginx/sites-available/

SBB 서비스의 엔진엑스 설정 파일을 다음과 같이 루트 권한으로 생성한다.

/etc/nginx/sites-available$ sudo vi sbb

sbb 파일의 내용을 다음과 같이 작성한다.

server {
       listen 80;
       server_name localhost;    
       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;
      }
}

작성한 sbb 파일을 엔진엑스가 SBB 서비스의 설정 파일로 읽을 수 있도록 sbb 파일을 /etc/nginx/sites-enabled 디렉터리에 링크해야 한다.

/etc/nginx/sites-available/sbb 파일을 /etc/nginx/sites-enabled/sbb 파일로 링크한다.

sudo ln -s /etc/nginx/sites-available/sbb
/etc/nginx/sites-enabled$ ls
sbb

엔진엑스를 리스타트해서 변경사항을 적용한다.

sudo systemctl restart nginx

이제 :8080을 빼고 웹 브라우저에서 AWS 고정 IP로 접속해보자.

http://3.17.239.146

도메인 연결 및 HTTPS 전환

도메인 연결

웹 사이트를 HTTPS로 접속하도록 할 수 있게 하기 위해서는 우선 도메인이 필요하다. 그리고 통신을 암호화 하기 위해 SSL/TLS 인증서 암호화 키도 발급 받아야 하는데, 여기서는 무료 키 발급 도구인 letsencrypt를 사용한다.

도메인은 가비아 등의 도메인 구매/발급 사이트에서 발급을 받아야 하는데, 필자는 내도메인.한국 에서 무료로 도메인을 발급 받았다.

https://xn--220b31d95hq8o.xn--3e0b707e

도메인을 발급받고 AWS EC2 인스턴스의 퍼블릭 IP를 연결해준다.

sudo vi /etc/nginx/sites-available/sbb
server {
        listen 80;
        server_name jshsbbproject.p-e.kr;

        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;
        }
}

엔진엑스를 다시 시작한다.

sudo systemctl restart nginx

HTTPS 전환

무료로 SSL 인증서를 발급해주는 Let’s Encrypt 서비스를 사용해 보자.

터미널 프로그램에서 다음과 같이 certbot과 python3-certbot-nginx를 설치한다.

sudo apt install certbot
sudo apt install python3-certbot-nginx

엔진엑스(nginx) 웹 서버에서 사용할 Let’s Encrypt의 인증서를 발급한다.

sudo certbot certonly --nginx
[이메일 주소 입력]
[엔터]

순서대로 내용을 입력하면 다음과 같은 위치에 인증서가 생성된다.

/etc/letsencrypt/live/[도메인명]/fullchain.pem
/etc/letsencrypt/live/[도메인명]/privkey.pem

sudo vi /etc/nginx/sites-available/sbb
server {
        listen 80;
        server_name jshsbbproject.p-e.kr;
        rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
        listen 443 ssl;
        server_name jshsbbproject.p-e.kr;

        ssl_certificate /etc/letsencrypt/live/jshsbbproject.p-e.kr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/jshsbbproject.p-e.kr/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.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;
        }
}

HTTP 요청을 받는 80번 포트를 HTTPS 요청을 받는 443번 포트로 리다이렉트하도록 설정했다. 그리고 설치한 SSL 인증서를 적용하기 위해 SSL 관련 설정을 적용했다.

엔진엑스의 설정을 바꿨으므로 다음과 같이 엔진엑스를 리스타트 한다.,

sudo systemctl restart nginx.service
HTTPS로 전환 성공

https://jshsbbproject.p-e.kr/

이제 브라우저에서 위 주소로 접속할 수 있다. 그리고 이전에 표시되던 ‘주의 요함’ 경고 메시지가 사라지고 SSL 인증이 되었음을 의미하는 열쇠 모양의 아이톤도 표시된다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다