NGINX란?
고성능 웹 서버 소프트웨어로, HTTP, HTTPS, TCP 및 UDP 프로토콜을 지원하며,
프록시 서버, 로드 밸런서, 역방향 프록시 및 HTTP 캐시 역할을 수행하는 데 사용된다.
특징
- 고성능: 비동기 이벤트 기반 아키텍처를 사용하여 많은 동시 연결을 처리할 수 있고, 높은 처리량과 저지연 제공
- 경량화: 적은 시스템 리소스를 사용하며, 메모리 사용량이 작아 효율적인 운영 가능
- 확장성: 확장성이 뛰어나며, 프록시 서버나 로드 밸런서로 사용될 때 여러 대의 웹 서버를 효과적으로 관리할 수 있습니다.
- 리버스 프록시: 역방향 프록시 서버로 사용될 수 있어 클라이언트 요청을 웹 서버로 전달하고 응답을 반환하는 역할 수행 가능
- 로드 밸런싱: 로드 밸런서로 사용될 수 있어 들어오는 트래픽을 여러 대의 서버로 분산시켜 부하 분산시키는 역할 수행
- 정적 및 동적 콘텐츠 제공: 정적 파일 서버로 사용될 수 있으며, 동적 콘텐츠를 처리하기 위해 FastCGI, SCGI, uWSGI와 같은 백엔드 서버와 통신 가능
Spring Boot와 사용할 경우 이점
- 로드 밸런싱: Spring Boot 애플리케이션을 여러 대의 서버에 배포하고, Nginx를 사용하여 로드 밸런싱을 수행할 수 있다. 이를 통해 애플리케이션의 처리 능력을 향상시킬 수 있다.
- SSL/TLS 암호화: SSL/TLS 암호화를 지원하며, Spring Boot와 함께 사용할 경우, HTTPS 프로토콜로 애플리케이션을 보호할 수 있다.
- 정적 파일 처리: Spring Boot는 동적으로 생성되는 콘텐츠를 처리하는 데 적합하며, Nginx는 정적 파일을 처리하는 데 적합하다. 따라서, Nginx를 앞단에 두어 정적 파일 처리를 수행하고, Spring Boot를 뒤에 두어 동적 콘텐츠 처리를 수행할 수 있다.
- 보안: 보안에 강한 웹 서버 중 하나로, 이를 사용하여 애플리케이션을 보호할 수 있다.
- 성능: 높은 성능을 제공합니다. Spring Boot와 함께 사용할 경우, 애플리케이션의 처리 속도를 높일 수 있다.
코드 분석
location /api {
proxy_pass http://backend-dev:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
//프록시 서버의 ip 주소
proxy_set_header X-Real_IP $remote_addr;
proxy_redirect off;
}
proxy_set_header 지시어는 Nginx에서 리버스 프록시 서버를 구성할 때 매우 중요한 역할을 한다.
이 지시어를 사용하여 요청 헤더를 재작성하면, 클라이언트에서 보낸 요청을 프록시 서버에서 처리한 후 백엔드 서버로 전달할 때, 요청 헤더를 제대로 전달할 수 있다.
보통 프록시 서버를 사용하는 이유는 백엔드 서버를 보호하고, 더 나은 성능을 위해 캐싱 기능을 사용하기 위함이다.
또한 클라이언트에서 보낸 요청을 그대로 백엔드 서버로 전달하면 보안상의 이슈나, 요청의 헤더나 바디에 불필요한 정보가 들어있을 수 있기 때문에, 프록시 서버에서 요청 헤더를 재작성하는 것이 좋다.
또한, proxy_set_header 지시어를 사용하여 요청 헤더를 재작성하면, 백엔드 서버에서 응답을 보낼 때 클라이언트에게 전달되는 응답 헤더도 재작성할 수 있다.
이를 통해 백엔드 서버에서 보내는 응답의 헤더나 바디에 불필요한 정보를 제거하거나, 보안 상의 이슈를 예방할 수 있다.
따라서, proxy_set_header 지시어를 적절히 사용하여 요청과 응답의 헤더를 재작성하면, 보안과 성능면에서 더 나은 웹 애플리케이션을 제공할 수 있다.
출처 및 참고
https://velog.io/@wijihoon123/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'👩💻 개발 > 📡 DEVOPS' 카테고리의 다른 글
[DevOps] SpringBoot + GitHub action + Nginx + AWS 배포 - 2 (0) | 2023.02.22 |
---|---|
[DevOps] SpringBoot + GitHub action + Nginx + AWS 배포 - 1 (2) | 2023.02.21 |
[DevOps] Github Actions란? (0) | 2023.02.20 |
[Docker] 도커 컴포즈란? (1) | 2022.12.23 |
[Docker] 도커란 무엇인가? (0) | 2022.12.23 |