우리 프로젝트는 여태까지
공유기에서 80 포트 (프론트) 와 8080 포트 (백엔드) 를 모두 열어놓고 사용했다.
그러나 이 방식으로는 HTTPS를 제대로 적용할 수 없다.
(HTTPS를 적용하려면 프론트와 백엔드 모두 443 포트가 되어야하니까)
따라서 프론트엔드 서버와 백엔드 서버의 포트번호를 통일하기 위해
NGINX 를 Reverse Proxy로 사용하기로 했다.
계획
Nginx 가 앞에서 80 포트 요청을 받으면
URI 에 따라 백엔드 (8080 포트) 혹은 프론트 (3000 포트) 로 건내주도록 한다.
이렇게 함으로써 백/프론트 모든 요청이 80 포트로 이루어지도록 한다.
1. 백엔드 api 변경
백엔드 api 가 "/api" 로 시작되도록 변경했다.
요청 uri가 /api 로 시작하면 백엔드 프로세스로, 그렇지않으면 프론트 프로세스로 전달하기 위해서다.
# application.yml 에 아래 코드 추가
server:
servlet:
context-path: /api
2. nginx 설치
$ sudo apt-get install -y nginx
3. Default Configuration 파일 unlink
default configuration 에 의해서 아래와 같이 나오는 듯 하다.
이 기본 설정을 없애보자.
/etc/nginx/nginx.conf
를 열어보면 다음과 같은 부분이 있다.
http {
...
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
...
}
이 부분에서 우리가 별도로 커스터마이즈한 conf 파일이 포함 된다.
default configuration 의 경우 실제 파일 위치는 다른곳에 있고 /etc/nginx/sites-enabled/ 경로에 심볼릭 링크가 생성되어있다.
고로 /etc/nginx/sites-enabled/ 경로의 default 설정파일 심볼릭 링크를 제거하면 default 설정 적용이 해제된다.
$ sudo unlink /etc/nginx/sites-enabled/default
4. 커스텀 conf 파일 작성
1
/etc/nginx/sites-available 에 footprint.conf 를 생성
2
/etc/nginx/sites-enabled 경로에 심볼릭 링크 생성
$ sudo ln -s /etc/nginx/sites-available/footprint.conf /etc/nginx/sites-enabled/footprint.conf
3
nginx 재가동
$ sudo service nginx reload
설정파일에 문법적 에러가 존재할 경우 reload 에 실패한다.
이 때는 /var/log/nginx 에 있는 error.log 를 열어보자. 실패 이유가 친절하게 써있을 것이다.
테스트해보니 사이트가 잘 실행되었다.
기존에 공유기에서 열어두었던 8080, 3000 이런 포트들은 이제 모두 닫고
SSH, 80 포트만 열어둔 상태가 되었다!
참고 (출처)
1. nginx 기초 사용법 정리 1 (conf, log, directive, Serving Static Content 의 과정에 대해서)
https://aimaster.tistory.com/11?category=344242
2. nginx 기초 사용법 정리 2 (location, proxy)
https://aimaster.tistory.com/12?category=344242
3. nginx 재가동 방법 restart VS reload
https://medium.com/sjk5766/nginx-중단-없이-변경된-설정-반영하는-방법-b0cc36a5fe59
4. NGINX 에서 Reverse Proxy 셋팅하는 방법
'2021 Project' 카테고리의 다른 글
무중단 배포 적용기 (1) - 프론트엔드 (React) (0) | 2021.08.24 |
---|---|
HTTPS 적용하기 (NGINX + Lets Encrypt) (1) | 2021.07.28 |
SQL 문법 - expected "identifier" 오류 (0) | 2021.06.28 |
Spring Data JPA 의 Repository (0) | 2021.06.28 |
실서버 YML 파일을 프로젝트 외부에서 관리하기 (0) | 2021.06.24 |