숨밈
들숨에 건강을 날숨에 재력을
숨밈
전체 방문자
오늘
어제
  • 분류 전체보기 (55)
    • 💻 프로젝트 (8)
      • 🍝 홍잇 (5)
      • 🏕 캠퍼 (3)
    • 👩‍💻 개발 (30)
      • ⚙️ BACKEND (16)
      • 🖥 FRONTEND (3)
      • 📡 DEVOPS (7)
      • 💡SOFTWARE (4)
    • 📑 개발 이론 (13)
      • 🚎 JAVA (1)
      • 🌱 SPRING (12)
    • 📚 CS (2)
      • 🔎 Infra (2)
    • 📔 회고 (2)

블로그 메뉴

  • 홈
  • 태그
  • 글쓰기

인기 글

태그

  • django-rest-auth_custom
  • static final
  • 스프링
  • jsp
  • querydsl
  • 타임리프
  • notion
  • 스프링부트
  • Tistory
  • 자바스크립트
  • Django
  • django-auth
  • springboot
  • 프리코스
  • django-rest-auth

티스토리

hELLO · Designed By 정상우.
숨밈

들숨에 건강을 날숨에 재력을

👩‍💻 개발/📡 DEVOPS

[Nginx] Nginx란?

2022. 12. 26. 01:54

NGINX란?

고성능 웹 서버 소프트웨어로, HTTP, HTTPS, TCP 및 UDP 프로토콜을 지원하며,

프록시 서버, 로드 밸런서, 역방향 프록시 및 HTTP 캐시 역할을 수행하는 데 사용된다.

 

특징

  1. 고성능: 비동기 이벤트 기반 아키텍처를 사용하여 많은 동시 연결을 처리할 수 있고, 높은 처리량과 저지연 제공
  2. 경량화: 적은 시스템 리소스를 사용하며, 메모리 사용량이 작아 효율적인 운영 가능
  3. 확장성: 확장성이 뛰어나며, 프록시 서버나 로드 밸런서로 사용될 때 여러 대의 웹 서버를 효과적으로 관리할 수 있습니다.
  4. 리버스 프록시: 역방향 프록시 서버로 사용될 수 있어 클라이언트 요청을 웹 서버로 전달하고 응답을 반환하는 역할 수행 가능
  5. 로드 밸런싱: 로드 밸런서로 사용될 수 있어 들어오는 트래픽을 여러 대의 서버로 분산시켜 부하 분산시키는 역할 수행
  6. 정적 및 동적 콘텐츠 제공: 정적 파일 서버로 사용될 수 있으며, 동적 콘텐츠를 처리하기 위해 FastCGI, SCGI, uWSGI와 같은 백엔드 서버와 통신 가능

Spring Boot와 사용할 경우 이점

  1. 로드 밸런싱: Spring Boot 애플리케이션을 여러 대의 서버에 배포하고, Nginx를 사용하여 로드 밸런싱을 수행할 수 있다. 이를 통해 애플리케이션의 처리 능력을 향상시킬 수 있다.
  2. SSL/TLS 암호화: SSL/TLS 암호화를 지원하며, Spring Boot와 함께 사용할 경우, HTTPS 프로토콜로 애플리케이션을 보호할 수 있다.
  3. 정적 파일 처리: Spring Boot는 동적으로 생성되는 콘텐츠를 처리하는 데 적합하며, Nginx는 정적 파일을 처리하는 데 적합하다. 따라서, Nginx를 앞단에 두어 정적 파일 처리를 수행하고, Spring Boot를 뒤에 두어 동적 콘텐츠 처리를 수행할 수 있다.
  4. 보안: 보안에 강한 웹 서버 중 하나로, 이를 사용하여 애플리케이션을 보호할 수 있다.
  5. 성능: 높은 성능을 제공합니다. 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

 

Nginx란 무엇인가?

Nginx는 경량 웹 서버입니다.클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는

velog.io

 

저작자표시 (새창열림)

'👩‍💻 개발 > 📡 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
    '👩‍💻 개발/📡 DEVOPS' 카테고리의 다른 글
    • [DevOps] SpringBoot + GitHub action + Nginx + AWS 배포 - 1
    • [DevOps] Github Actions란?
    • [Docker] 도커 컴포즈란?
    • [Docker] 도커란 무엇인가?
    숨밈
    숨밈
    기술블로그

    티스토리툴바