centos에 nginx 및 SSL 설치

개요

SPA 프레임웍을 구축하게 되면 image, js, css 같은 정적인 파일을 서비스하는 프런트엔드 서버와 REST api를 제공하는 백엔드 서버가 필요하다.

linux 시스템에서는 정적인 파일을 서비스하는 웹서버로 nginx가 최적의 웹서버로 알려져 있으며 spring boot과 같은 백엔드 서버는 nginx 뒷단에 reverse proxy로 구성하게 된다.  이렇게 구성하면 CORS 문제도 생기지 않는다.

또한 lets’s encrypt라는 무료 SSL을 설치하고, 파일업로드를 하기 위한 설정을 추가한다.

먼저 정적 웹서버는 80 포트로 설정하고 백엔드 REST api 서버는 8080으로 설정하겠다.

nginx 설정

/etc/nginx/nginx.conf 에는 공통 사항을 기록한다.

REST api로 파일을 업로드하는 경우 프런트를 통해서 들어오므로 nginx에서 file upload를 설정하는 부분 4줄과, 백엔드로 연동하는 reverse proxy 부분은 기본 설정에는 없는 부분이니 잘 기억해야 한다.

80번 포트로 정적 웹서버 구성은 /etc/nginx/conf.d/default.conf 화일에 설정한다.

/api 경로로 들어올 경우 http://localhost/api가 먼저 받은후 reverse proxy로 설정된 http://localhost:8080/api 톰캣 서버로 연동한다.

server_name에 eastflag.co.kr 부분은 각자 적당한 도메인으로 변경한다.

try_files 는 SPA의 경우에 홈이 아니라 url 경로로 들어올 경우에 처리하기 위해서 추가해주어야 한다.

nginx를 다시 구동한다

# systemctl restart nginx

# systemctl reload nginx

Let’s Encrypt SSL 설치

먼저 아래 명령을 실행해서 dhparam.pem을 만든다.

certbot 을 설치한다.

이렇게 설치하면 /etc/letsencrypt/live/도메인 에 4개의 화일이 설치된다.

만일 certbot-nginx 가 아니라 certbot으로 설치했다면 nginx 공통 설정 화일인 options-ssl-nginx.conf 화일이 없을것이므로 이 화일을 /etc/letsencrypt/options-ssl-nginx.conf 위치에 수동으로 추가해주어야 한다.

/etc/nginx/conf.d/default.conf 을 추가하고 443 SSL 포트 설정을 한다.

만일 80번 포트로 접속시 443 포트로 리다이렉션을 시킬려면 /etc/nginx/conf.d/http.conf 를 추가하여 아래와 같이 설정한다.

let’s encrypt는 3개월후에 만료가 된다. 갱신 메일이 날라오면 certbot renew를 해준다. 3개월마다 하는게 귀찮다면 3개월 주기로 실행되는 crontab 을 추가해주어야 한다.