티스토리 뷰

Server

Amazon Linux 서버의 HTTPS 설정

니용 2022. 5. 28. 13:32
반응형

아마존 리눅스 이미지 인스턴스의 nginx 설정도 기존에 nginx 설정과 크게 다르지 않습니다. 이전에 글을 작성한 기록이 있으니 참고하셔도 좋을 것 같아요.

https://abbo.tistory.com/170

 

Nginx 설치와 기본 환경 설정

웹서버를 사용할 때 apache와 더불어 nginx 를 많이 사용합니다. 읽을 때는 엔진엑스라고 읽게 되는데, 이번 글에서는 nginx를 설치하고 환경 설정을 하는 방법을 작성해보려 합니다. 웹 서버 웹 서버

abbo.tistory.com

 

1. Amazon Linux Nginx 설치하기

sudo amazon-linux-extras install nginx1

 

2. Nginx 시작하기

sudo service nginx start

 

3. HTTPS (SSL 설정하기)

이제 서버에 인증서를 설치하여야 합니다. certbot 이라는 무료 소프트웨어를 사용하여 인증서를 등록하고 다운로드 받을 것인데, 이 작업을 하기 전에 도메인을 먼저 구입해두어야 합니다. 저는 글작성의 편의성 domain.com 이라고 하겠습니다. 

3-1. epel 설치

epel은 Extra Package for Enterprise Linux의 약자로 리눅스를 사용하는 사용자들에게 추가 패키지를 제공하는 도구입니다. wget을 이용하여 다운로드 받아서 쉽게 설치합니다.

sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/

 

3-2. rpm 설치

다음으로 rpm 이라는 명령어를 설치하여 nginx 설치 도구를 사용할 준비를 합니다.

sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm

 

3-3. epel 활성화

sudo yum-config-manager --enable epel*

 

4. certbot 설치

certbot을 설치하면서 python2 도 같이 설치합니다. 이는 certbot의 패키지입니다. 

설치가 다 되면 nginx을 설치합니다.

sudo yum install -y certbot python2-certbot-apache 
sudo yum install certbot-nginx

 

5. Letsencrypt 서비스 시작

sudo certbot --nginx -d domain.com

위의 명령어를 타이핑하면 서버 1대당 한 번씩 이메일을 등록하고 이용 약관을 동의하냐는 질문을 하게 됩니다. 이메일 주소를 입려가고 A를 누르면 다음으로 넘어갑니다. 여기서 -d 옵션은 사용하고자 하는 도메인을 등록하는 옵션입니다. 

 

인증이 다 되면 아래와 같은 메시지가 출력됩니다. 여기에선 nginx에서 사용할 인증서 2개가 출력됩니다. fullchain.pem과 privkey.pem의 Key File 2개가 자동으로 생성되는데 이 경로를 이따가 nginx.conf 설정에서 사용하게 됩니다. 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://domain.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=api.woodaebbang.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/domain.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/domain.com/privkey.pem
   Your cert will expire on 2022-08-15. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 

6. 인증서 자동갱신

인증서는 3개월을 주기로 만료가 됩니다. 그래서 만료 1달전에는 위에서 적은 이메일로 인증서를 갱신하라는 이메일이 오는데, 그렇게 할 필요 없이 인증서 자동 갱신 설정을 해두면 됩니다. 

sudo vi /etc/crontab

위의 명령어를 치고 cron 식을 사용하여 저장합니다.

50 1 * * * root certbot renew --no-self-upgrade

스케줄은 매일 새벽 1시 50분에 root 권한으로 처리되고 -no-self-upgrade 플래그를 사용하면 Certbot이 사용자의 개입 없이 자체 업그레이드하지 않습니다. 

그리고 서비스를 재시작합니다. 

sudo systemctl restart crond

 

7. Nginx 설정

Amazon Linux 운영체제의 nginx 설정 파일은 /etc/nginx/nginx.conf 파일에 위치하고 있습니다. ubuntu에서는 /etc/nginx/sites-available/default 파일로 운영되는데, nginx 문법이므로 원리는 같습니다. 

http {
	access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    server {
            root         /usr/share/nginx/html;
            server_name domain.com; # 여기에 사용할 도메인을 씁니다.
            ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
            listen       443 ssl http2;
            listen       [::]:443 ssl http2;
            # Load configuration files for the default server block.
            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 X-Forwarded-Proto $scheme;
                                add_header      Front-End-Https on;
                                proxy_set_header Host $http_host;
                 }

            error_page 404 /404.html;
            location = /404.html {
            }

            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
            }

    }
 }

이제 위에서 추가할 부분은 ssl_certificate의 fullchain.pem 연결과 privkey.pem 파일을 연결해주어야 하고, location 에서 proxy할 포트로 전환하는 설정을 해줍니다. 

설정이 다 되었으면 nginx service 를 재시작합니다.

sudo service nginx restart
반응형
댓글
공지사항