한마디로 웹서버
Web Server : Nginx. 정적페이지, 완제품
WAS : Spring Boot(Tomcat) : 동적페이지, 주문제작
할일이 많은 WAS를 대신해서 정적파일, 이미지를 내려주는 일을 NGINX가 대신한다
- 가장 저렴하다
- 기존에 쓰던 EC2에 그대로 적용하면 되기 때문에 배포를 위해 AWS EC2 인스턴스가 하나더 필요하지 않다.
- 아파치, openresty에 비해 빠르기 때문에 전세계 점유율 1위
- 리버스 프록시 : 인터넷과 백엔드 사이에 있는 서버
- 클라이언트에게 서버의 정보를 감춘다
3. 로드 밸런싱 역할을 한다
a. 요청들을 모두 받아서 어느 WAS로 가야하는지 길을 알려주고 밸런스있게 조율해준다- 캐싱을 해준다
a. 서버단의 캐시 서버
b. 동일한 요청이 발생했을 때 WAS로 가지않고 cache에 저장해둔 값을 가져다 씀.- 보안 역할
a. WAS의 응답데이터에 많은 정보가 담겨있다.
b. NGINX가 중요 데이터들을 중간에 숨겨준다.
- HTTPS의 보안 인증서를 지원해준다
- 이벤트 루프 방식을 사용한다(event driven)
- 요청을 한줄로만 받음
- 많은 트래픽을 동시에 처리할 수 있다
- http://nginx.org/en/download.html
- Stable version의 Windows버전을 다운받는다.
- 압축을 풀어준다
- nginx파일을 실행시켜준다
- 브라우저에서 localhost쓰고 엔터를 치면 (localhost:80과 동일. http로 연결시 80번 포트로 연결된다)
- 잘실행되는 것을 확인가능
- 종료시키려면 작업관리자에서 직접 종료시켜준다
참고 : https://velog.io/@damiano1027/Nginx-Nginx와-SpringBoot-내장-Tomcat-연동
- 기존방식처럼 ec2 서버에 스프링부트 프로젝트 build 업로드하기(보안그룹에서 해당 port 열어주기)
- ec2 보안그룹에서 80포트 열어주기(http 요청 기본 port)
- git bash에서 ec2 서버에 접속한 후,
- niginx 설치 :
sudo apt-get install nginx
- nginx 시작 :
sudo service nginx start
- 브라우저에서 ec2 ip주소:80에 접속시 아래처럼 뜨면 성공
- 이제 80포트로 접속시 nginx가 이 요청을 스프링부트가 WAS가 있는 8081포트로 리다이렉트를 해주는 작업을 해야한다.
- nginx 메인파일 nginx.conf 확인하기
- ec2에 접속한 상태에서 git bash에 cd /etc/nginx
- ls를 실행하면 파일들이 보이는데 이 위치에 nginx.conf 가 있다
- sites-available 디렉토리에 실제 적용할 설정파일을 만들어주고 (ex. 80 포트에서 8081포트로 리다이렉트 해주는 명령어 파일)
- 설정파일에 대한 심볼릭 링크를 sites-enabled 디렉토리에 만들어주면
- nginx.conf파일이 이를 읽어 들인다
- sites-available 디렉토리에 실제 적용할 설정파일을 만들어주기
- sites-available에 들어가서 test.conf 파일 만들어주기
cd /etc/nginx/sites-available sudo vi test.conf
- test.conf에 80포트로 localhost에 들어오는 모든 request에 대해 localhost 8080포트로 접속하게 해주는 내용 써주기
server { listen 80; listen [::]:80; server_name localhost; 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 Host $http_host; } }
- 붙여넣기 후 esc를 눌러서 명령어 모드로 변환 후, :w를 써서 저장시켜준다. 컨트롤 z를 누르면 폴더로 다시 이동한다
- sites-enabled에 심볼릭 링크 만들기
sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled
- 명령어를 실행시킨 후, sites-enabled 디렉토리로 이동하여 아래에 존재하는 파일들을 열어보면
cd /etc/nginx/sites-enabled ls -l
- 2개의 심볼릭 링크가 존재한다. default는 기본값으로 존재하는것이기에 삭제해준다
sudo rm default
- 삭제 해 준 후, nginx를 재시작 해준다
- 이제 브라우저에서 80포트로 접속을 해도 스프링부트 포트로 접속시 뜨는 화면이 뜬다.