Nginx
- 비동기적으로 처리되는 웹 서버
- 수많은 트래픽을 처리하는 상황에서, 아파치 웹서버보다 처리가 더 용이
용도
- 정적 컨텐츠 호스팅
- 리버스 프록시
- 로드 밸런서
- SSL
- Failover
- 캐싱
구조
sites-available
과 sites-enabled
구조는 요즘 지양하는 추세
- 아파치 서버와 호환하기 위해 만들어진 것들이라고 함
- 그래서
conf.d
디렉터리에 넣어서 서버를 추가하는 추세
nginx.conf
conf.d 디렉터리 안의 정적 페이지 호스팅
server_name
이 -
라면, 기본 도메인을 보여준다는 의미
프록시 설정
proxy_pass
는 지정된 주소로 요청을 보내도록 프록시 설정해주는 역할
Load Balancing
Round Robin
- 기본적인 전략은
round-robin
방식
- 위의 사진처럼 설정할 시, 한 번씩 번갈아가면서 로드벨런싱이 적용
Weight
- 가중치를 설정하여 요청 빈도를 정해줄 수 있음
- v1에 한 번 요청하면, 다음엔 v2로 세 번 요청하게 됨
IP Hash
Caching
level
은 저장 경로의 depth
를 지정할 때 쓰임
proxy_cache_valid any 3s
- 모든 응답에 대해 3초간 캐시를 적용한다는 의미
cache key 설정
- 기본 캐시 키 전략은
스키마, 메소드, 호스트, uri
를 사용함
- 네 가지 중 하나라도 다르다면, 다른 결과물을 캐시하게 됨
- 캐시 키 전략을 설정해줄 수 있음
- 단,
Authorization
과 같은 인증에 사용되는 헤더가 존재할 경우, NGINX가 보안 차원에서 캐시 기능을 막음
- 그래서, 이미지와 같은
정적 리소스
에 대해서만 따로 캐시를 적용
시킬 수 있음
(정적 파일만 캐싱된 모습)
CORS
- NGINX 서버가 하나라면, origin이 같으므로 별도의 설정은 안해줘도 된다.
- 트래픽 분산을 위해 정적 파일과 API 서버를 나눌 경우, CORS를 따로 설정해줘야 한다.
- 스프링에서도 따로 설정을 해줄 수 있지만, NGINX를 통해서도 해줄 수 있다.
OPTIONS
메소드를 통해 확인 후 설정하는 모습
SSL
출처