[TIL] #9 Nginx

phdljr·2023년 10월 16일
0

TIL

목록 보기
9/70

Nginx

  • 비동기적으로 처리되는 웹 서버
    • 수많은 트래픽을 처리하는 상황에서, 아파치 웹서버보다 처리가 더 용이

용도

  • 정적 컨텐츠 호스팅
  • 리버스 프록시
  • 로드 밸런서
  • SSL
  • Failover
    • 문제있는 서버에 대해 연결을 조절할 수 있음
  • 캐싱
    • 정적 리소스를 캐싱 가능

구조

  • sites-availablesites-enabled 구조는 요즘 지양하는 추세
    • 아파치 서버와 호환하기 위해 만들어진 것들이라고 함
    • 그래서 conf.d 디렉터리에 넣어서 서버를 추가하는 추세

nginx.conf

conf.d 디렉터리 안의 정적 페이지 호스팅

  • server_name- 라면, 기본 도메인을 보여준다는 의미

프록시 설정

  • proxy_pass 는 지정된 주소로 요청을 보내도록 프록시 설정해주는 역할

Load Balancing

Round Robin

  • 기본적인 전략은 round-robin 방식
    • 위의 사진처럼 설정할 시, 한 번씩 번갈아가면서 로드벨런싱이 적용

Weight

  • 가중치를 설정하여 요청 빈도를 정해줄 수 있음
    • v1에 한 번 요청하면, 다음엔 v2로 세 번 요청하게 됨

IP Hash

  • IP 기반 로드밸런싱

Caching

  • level은 저장 경로의 depth를 지정할 때 쓰임

  • proxy_cache_valid any 3s
    • 모든 응답에 대해 3초간 캐시를 적용한다는 의미

cache key 설정

  • 기본 캐시 키 전략은 스키마, 메소드, 호스트, uri를 사용함
    • 네 가지 중 하나라도 다르다면, 다른 결과물을 캐시하게 됨

  • 캐시 키 전략을 설정해줄 수 있음
    • 단, Authorization과 같은 인증에 사용되는 헤더가 존재할 경우, NGINX가 보안 차원에서 캐시 기능을 막음
    • 그래서, 이미지와 같은 정적 리소스에 대해서만 따로 캐시를 적용시킬 수 있음


      (정적 파일만 캐싱된 모습)

CORS

  • NGINX 서버가 하나라면, origin이 같으므로 별도의 설정은 안해줘도 된다.

  • 트래픽 분산을 위해 정적 파일과 API 서버를 나눌 경우, CORS를 따로 설정해줘야 한다.
  • 스프링에서도 따로 설정을 해줄 수 있지만, NGINX를 통해서도 해줄 수 있다.
    • OPTIONS 메소드를 통해 확인 후 설정하는 모습

SSL

출처

profile
난 Java도 좋고, 다른 것들도 좋아

0개의 댓글