본문 바로가기

{시리즈}/Nginx7

7. Nginx 정리 마치며 정리의 이유 Nginx 시리즈는 21년도 12월에 사이드 프로젝트를 위해 정리했던 내용을 토대로 작성한 글이다. 요즘에는 AWS 프리티어 덕분에 Nginx를 직접 설치해서 사용하는 경우는 드물어 보인다. 나 또한 사이드 프로젝트 이후 지난 2년간 현업에서도 개인적으로도 Nginx를 설치하여 사용한 적은 없었다. 그렇다면 'Nginx 지식은 현재 중요하지 않을까?' 적어도 내겐 아니었다. 현업에 들어가기 전, AWS 사용해 보기 전 Nginx를 사용해 본 경험은 내게 큰 시야를 가져다주었기 때문이다. 그리고 지금부터 내가 얻은 큰 시야에 대해 얘기해 보려 한다. 웹 서비스 인프라 웹 서비스를 제공하기 위한 인프라는 복잡하며, 회사에 따라 서비스에 따라 조금씩 다른 구조를 가진다. 하지만 아무리 다르다고 하.. 2023. 11. 21.
6. HTTP 부하 분산을 위한 설정 방법 1. Nginx에서 제공하는 HTTP 부하 분산 기능 (with LB) Nginx는 여러 알고리즘과 느린 시작 및 세션 지속성과 같은 고급 기능을 사용하여 웹 또는 애플리케이션 서버 그룹에서 HTTP 트래픽 부하 분산을 지원한다. *Nginx는 오픈소스이지만 유료버전인 Nginx plus가 따로 존재한다. 그리고 로드밸런시 기법중 일부는 유료버전인 Nginx plus에서만 지원한다. 때문에 본문에서는 오픈소스 Nginx에서 사용할 수 있는 기법만 정리한다. 2. 서버 그룹에 대한 HTTP 트래픽 프록시 Nginx의 HTTP 트래픽 로드 밸런싱(이하 L7)을 사용하려면 먼저 http 컨텍스트 하위 지시문으로 upstream 블록을 사용하여 그룹을 정의해야 한다. ( AWS ALB의 Target Group와.. 2023. 11. 5.
5. 리버스 프록시를 위한 설정 작성 방법 1. Nginx에서 말하는 프록싱 프록싱은 일반적으로 여러 서버에 로드를 분산하는 작업에 사용된다. 다른 웹사이트의 콘텐츠를 매끄럽게 표시하는 작업에 사용된다. HTTP 이외의 프로토콜을 통해 처리 요청을 에플리케이션(WAS) 서버로 전달하는데 사용된다. “CSR - API 서버” 구조를 사용시 Nginx를 사용하여 API 서버를 프록시하는 방법을 많이 사용한다. 2. 프록시 서버에 요청 전달 Nginx의 프록싱은 요청을 뒷단 서버로 보내고, 처리된 결과를 받아와 클라이언트로 응답한다. Nginx는 지정된 프로토콜을 사용하여 HTTP 서버(Nginx이외의 또 다른 서버)에 요청을 전달한다. 또한 HTTP가 아닌 서버에도 요청을 전달(프록시) 할 수 있다. 지원되는 프로토콜은 FastCGI, uwsgi, .. 2023. 11. 5.
4. 웹 서버를 위한 설정 방법 1. 웹 서버 설정을 위해 http 컨텍스트 정의 http { # 웹 서버 공통 환경 설정 지시문 정의 } 2. 가상 호스트 서버 설정을 위한 server 블록 정의 가상 호스트 서버 이하 "가상 서버" http { server { } } 3. server 블록안에 지시문 정의 http { server { # 3.1. listen 지시문 listen 127.0.0.1:8080; # 3.2. server_name 지시문 server_name example.org www.example.org } } 3.1. listen 지시문 사용 방법 listen 지시문에는 가상 서버가 사용할 ip와 port를 정의한다. # 1) ip를 생략하면 모든 ip에 대해 리슨한다. listen 80; # 2) localhost에.. 2023. 11. 5.
3. 설정 파일 기본 구조 1. Nginx의 설정 파일 Nginx는 환경 설정 파일로 여러 가지 값을 지정해 Nginx가 실행할 수 있도록 지원한다. 설정 파일은 논리적을 작성된 지시문 목록이며, 독립된 규칙을 가진다. 또한 Nginx에는 다양한 모듈이 존재하고 설정파일의 지시문에 따라 내부에 정의된 모듈을 사용한다. 설정파일 작성 규칙 지시문은 변수 또는 값을 가지며, 각각의 지시문은 세미콜론을 사용하여 종결한다. 설정파일에서는 중괄호({})를 사용하여 그룹화 한다. 이것을 블록 또는 컨테이너라고 말한다. 설정파일은 샵(#)을 사용하여 주석을 사용할 수 있다. 2. 설정 파일 지시문과 종류 2.1 지시문 구조 # 2.1.1 Core 모듈 설정(= Nginx app 설정) user nginx; ## NGINX 프로세스가 실행되는 .. 2023. 11. 5.
2. Nginx 동작원리 1. Nginx vs Apache Apache 서버의 구조적 한계 Apache 서버의 구조를 MPM(Multi-Process Module) 방식이라 한다. Apache와 같은 전통적인 웹서버는 클라이언트로부터 받은 요청이 들어오면 요청 하나당 하나의 프로세스 또는 스레드(이하 "스레드")를 생성하여 처리한다. 요청마다 스레드가 생성되는 구조는 안정적인 구조와 높은 확장성이라는 장점을 가진다. 하지만 요청마다 스레드를 만드는 구조 한계가 있다. 요청이 많으면 그 요청 만큼 스레드를 생성하여 요청을 처리한다. 때문에 서버의 CPU와 메모리 자원의 소모가 커지는 단점을 가진다. (실제로 Apache 서버에는 1만 명의 접속자가 넘어가면 발생하는 성능저하 C10k 문제가 있다.) 추가로 웹은 효율적인 커넥션 관.. 2023. 11. 5.