Nginx와 Let's encrypt를 사용한 https 설정하기
Nginx의 보안 이점
클라이언트와 WAS 사이에 리버스 프록시 서버인 Nginx를 둠으로써 클라이언트는 웹서버처럼 리버스 프록시 서버에 요청을 하고 WAS는 리버스 프록시로부터의 사용자 요청을 대신 받는다. 리버스 프록시 서버를 사용함으로써 클라이언트는 WAS의 존재를 알지못하므로 보안이 향상되는 결과를 가져온다.
1.Nginx 설치
$ sudo apt update
$ sudo apt install nginx
위의 명령어를 사용하여 nginx를 설치합니다.
2.Nginx 리버스 프록시 설정
$ cd /etc/nginx/conf.d
$ vim default.conf
/etc/nginx/conf.d로 이동하여 vim을 이용하여 Nginx 설정 파일인 default.conf 를 만듭니다.
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass http://XXX.XXX.XXX.XXX;
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;
}
}
default.conf에 위의 내용을 작성해줍니다.
server_name으로는 SSL을 이용하여 https를 만들 도메인 이름을 적어줍니다.
proxy_pass에는 현재 서버의 IP 주소를 적어줍니다.
3.cerbot 설치 및 SSL 인증서 발급
$ sudo snap install certbot --classic
위의 명령어를 이용하여 certbot를 설치해줍니다.
$ sudo certbot --nginx
위의 명령어를 사용하여 SSL 인증서를 발급받아줍니다.
이메일을 입력하고, 이용약관에 동의한 후 적용할 도메인을 입력해줍니다.
이후 다시 default.conf에 가면 자동으로 https에 대한 설정이 되어있는것을 볼 수 있습니다.
server {
server_name your.domain.com;
location / {
proxy_pass http://XXX.XXX.XXX.XXX;
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;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = your.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name your.domain.com;
return 404; # managed by Certbot
}
도메인인 your.domain.com으로 접속하면 자동으로 https가 설정된 도메인으로 리다이렉트 되는 것을 볼 수 있습니다.
4.Crontab을 이용한 ssl 인증서 갱신
Let's Encrypt에서 만들어주는 ssl 인증서는 90일의 유효기간을 가지므로 유효기간이 지나거나 그전에 서버에 접속하여 인증서를 갱신해줘야한다. 이 과정이 번거롭기 때문에 Linux에서 제공하는 Crontab을 사용하면 서버에 접속하지 않고 인증서를 자동으로 발급이 가능하다.
$ crontab -e
위의 명령어를 사용하여 crontab job을 생성합니다.
원하는 에디터를 고른 후 아래의 명령어를 주석 맨 밑에 입력해줍니다.
0 0 1 * * certbot renew --post-hook "sudo service nginx reload"
이 명령어는 매월 1월에 certbot를 실행하여 SSL을 인증서를 갱신하고 nginx의 설정파일을 reload 해줍니다.
5.Nginx 명령어
(1) Nginx 실행
sudo systemctl start nginx
(2) Nginx 재실행
sudo systemctl restart nginx
(3) Nginx 중단
sudo systemctl stop nginx
(4) Nginx 상태 보기
sudo service nginx status
(5) Nginx 설정 파일 확인
sudo nginx -t
참고자료
https://hudi.blog/https-with-nginx-and-lets-encrypt/
Nginx와 Let's Encrypt로 HTTPS 웹 서비스 배포하기 (feat. Certbot)
목표 우리의 목표 우리의 목표는 위 그림과 같다. 클라이언트와 WAS 사이에 리버스 프록시 서버를 둔다. 클라이언트는 웹서버처럼 리버스 프록시 서버에 요청하고, WAS는 리버스 프록시로부터 사
hudi.blog