Nginx

SeonKyum·2021년 12월 22일
0

Nginx 란???

  1. 한마디로 웹서버

  2. Web Server : Nginx. 정적페이지, 완제품

  3. WAS : Spring Boot(Tomcat) : 동적페이지, 주문제작

왜 쓰는가?

  1. WAS의 부담을 줄여주기 위해

    할일이 많은 WAS를 대신해서 정적파일, 이미지를 내려주는 일을 NGINX가 대신한다

  2. 무중단 배포를 위해?
    1. 가장 저렴하다
    2. 기존에 쓰던 EC2에 그대로 적용하면 되기 때문에 배포를 위해 AWS EC2 인스턴스가 하나더 필요하지 않다.
  3. 빠르다
    1. 아파치, openresty에 비해 빠르기 때문에 전세계 점유율 1위
  4. 리버스 프록시를 사용한다
    1. 리버스 프록시 : 인터넷과 백엔드 사이에 있는 서버
    2. 클라이언트에게 서버의 정보를 감춘다 3. 로드 밸런싱 역할을 한다
      a. 요청들을 모두 받아서 어느 WAS로 가야하는지 길을 알려주고 밸런스있게 조율해준다
    3. 캐싱을 해준다
      a. 서버단의 캐시 서버
      b. 동일한 요청이 발생했을 때 WAS로 가지않고 cache에 저장해둔 값을 가져다 씀.
    4. 보안 역할
      a. WAS의 응답데이터에 많은 정보가 담겨있다.
      b. NGINX가 중요 데이터들을 중간에 숨겨준다.
  5. SSL 지원
    1. HTTPS의 보안 인증서를 지원해준다
  6. 비동기 처리
    1. 이벤트 루프 방식을 사용한다(event driven)
    2. 요청을 한줄로만 받음
    3. 많은 트래픽을 동시에 처리할 수 있다

local에 nginx 설치법

  1. http://nginx.org/en/download.html
  2. Stable version의 Windows버전을 다운받는다.
  3. 압축을 풀어준다
  4. nginx파일을 실행시켜준다
  5. 브라우저에서 localhost쓰고 엔터를 치면 (localhost:80과 동일. http로 연결시 80번 포트로 연결된다)
  6. 잘실행되는 것을 확인가능
  7. 종료시키려면 작업관리자에서 직접 종료시켜준다

ec2 서버에 niginx 와 Spring Boot 연동시키기 기본 - 리버스 프록시

참고 : https://velog.io/@damiano1027/Nginx-Nginx와-SpringBoot-내장-Tomcat-연동

  1. 기존방식처럼 ec2 서버에 스프링부트 프로젝트 build 업로드하기(보안그룹에서 해당 port 열어주기)
  2. ec2 보안그룹에서 80포트 열어주기(http 요청 기본 port)
  3. git bash에서 ec2 서버에 접속한 후,
  4. niginx 설치 : sudo apt-get install nginx
  5. nginx 시작 : sudo service nginx start
  6. 브라우저에서 ec2 ip주소:80에 접속시 아래처럼 뜨면 성공
  7. 이제 80포트로 접속시 nginx가 이 요청을 스프링부트가 WAS가 있는 8081포트로 리다이렉트를 해주는 작업을 해야한다.
  8. nginx 메인파일 nginx.conf 확인하기
  9. ec2에 접속한 상태에서 git bash에 cd /etc/nginx
    1. ls를 실행하면 파일들이 보이는데 이 위치에 nginx.conf 가 있다
    2. sites-available 디렉토리에 실제 적용할 설정파일을 만들어주고 (ex. 80 포트에서 8081포트로 리다이렉트 해주는 명령어 파일)
    3. 설정파일에 대한 심볼릭 링크를 sites-enabled 디렉토리에 만들어주면
    4. nginx.conf파일이 이를 읽어 들인다
  10. sites-available 디렉토리에 실제 적용할 설정파일을 만들어주기
    1. sites-available에 들어가서 test.conf 파일 만들어주기
    2. cd /etc/nginx/sites-available
      sudo vi test.conf
    3. 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;
          }
      }
    4. 붙여넣기 후 esc를 눌러서 명령어 모드로 변환 후, :w를 써서 저장시켜준다. 컨트롤 z를 누르면 폴더로 다시 이동한다
  11. sites-enabled에 심볼릭 링크 만들기
    1. sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled
    2. 명령어를 실행시킨 후, sites-enabled 디렉토리로 이동하여 아래에 존재하는 파일들을 열어보면
      cd /etc/nginx/sites-enabled
      ls -l
    3. 2개의 심볼릭 링크가 존재한다. default는 기본값으로 존재하는것이기에 삭제해준다
    4. sudo rm default
    5. 삭제 해 준 후, nginx를 재시작 해준다
    6. 이제 브라우저에서 80포트로 접속을 해도 스프링부트 포트로 접속시 뜨는 화면이 뜬다.
profile
차근차근,,

0개의 댓글