DevOps/AWS

AWS Nginx SSL 인증서와 프록시 설정하기

_sparrow 2020. 5. 7. 16:33
반응형

 

기존에 작성했던 글 : 무료 SSL인증서 발급하기 , 리버스프록시 설정하기

 

이번글은 기존 작성했던 글과 다른 Amazon Linux AMI OS를 사용했습니다.

 단순히 리버스프록시 적용하려면 위의 링크를 보세요

 

 

Certbot 설치하기

$ curl -O https://dl.eff.org/certbot-auto
$ chmod +x certbot-auto
$ mv certbot-auto /usr/bin/certbot-auto

 

 

Nginx 설치하기(설치안되어있다면 설치해주세요)

$ sudo yum install nginx -y

// certbot 설치를 위해서 Nginx를 잠시 멈춰줘야합니다.
$ sudo service nginx stop

 

 

certbot을 통해 인증서 받기

$ certbot-auto certonly --standalone -d example.com --debug

// 아마존 리눅스는 --debug를 붙혀줘야 설치됩니다

// 이메일이든 YES/NO든 물어보는데 설정끝나고나서 아래의 메시지가 뜨면 설치 완료!

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2016-mm-dd. To obtain a new version of the certificate in
   the future, simply run Certbot again.
 - 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

 

 

Nginx 설정하기

$ cd /etc/nginx/
$ cp nginx.conf nginx.conf.org

// nginx.conf 파일 수정 혹은 sudo /etc/nginx/conf.d/virtual.conf 파일에 입력해도된다.
$ sudo vi nginx.conf

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;

// http 접속시 https로 리다이렉트
        return 301 https://$host$request_uri;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

//프록시로 받아올 정보의 포트번호 임의 설정
        location / {
        proxy_pass https://localhost:3000/;
        }
}
$ sudo vi /etc/nginx/conf.d/virtual.conf

server {
    server_name  도메인주소;
    listen 443;
    
    ssl                  on;
    ssl_certificate      /etc/letsencrypt/live/도메인주소/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/도메인주소/privkey.pem;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
    ssl_prefer_server_ciphers   on;

    # 리버스프록시 설정
    # location / {
    #     proxy_set_header X-Real-IP $remote_addr;
    #     proxy_set_header HOST $http_host;
    #     proxy_set_header X-NginX-Proxy true;
    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
    #     proxy_pass http://localhost:3000;
    #     proxy_redirect off;
    # }
}

 

 

Nginx 재시작하기

$ sudo service nginx start

//  주소라던지 nginx 내부 기타 설정을 변경했다면 항상 nginx 서버를 끄고 다시 켜줘야 적용이 된다.

$ sudo service nginx stop // 끄기
$ sudo service nginx start // 켜기


$ sudo nginx -s reload
$ sudo /etc/nginx -s reload

 

 

SSL 자동 재갱신하기

$ certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" --dry-run

// 크론탭으로 자동 재갱신 설정하기
crontab -e

// 파일 내부에 작성해주면 된다.
0 0 1 * * certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"

// 크론탭 설정 확인
crontab -l
 
반응형

'DevOps > AWS' 카테고리의 다른 글

let's encrypt 인증서 갱신 안될때  (0) 2020.11.14