soowanlog

Nginx 본문

Computer Science/Web

Nginx

개발자솬
Computer Science/Web

Nginx

개발자솬 2024. 4. 5. 22:34
728x90
반응형
  • Nginx란?

Nginx는 오픈 소스로 개발된 Web Server SW로 단일 스레드 아키택처를 기반으로 하며, 비동기 이벤트 기반 방식을 사용합니다.

 

Reverse Proxy Server로 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서 역할을 하기도 합니다.

  • Nginx의 구조

- Master Process :

Nginx는 시작될 때 하나의 Master Process를 실행합니다.

Master Process는 설정 파일을 읽고, Worker Process들을 생성, 관리합니다.

Worker Process가 만들어질 때 지정된 listen 소켓을 배정합니다.

 

- Worker Process :

실제로 일을 하는 프로세스입니다.

Listen 소켓에 새로운 요청이 들어오면 connection을 형성하고 처리합니다.

Connection은 정해진 Keep-Alive 시간만큼 유지되고, 하나의 Worker Process는 여러 connection을 담당합니다.

Worker Process는 비동기 이벤트 기반 방식으로 요청을 처리하며, 각 Worker Process는 독립적으로 요청을 처리하기 때문에 다중 코어 CPU 시스템에서도 효율적으로 동작합니다.

 

- Event :

Connection의 형성과 제거 또는 새로운 요청을 처리하는 것을 말합니다.

Event들은 OS의 Kernel이 queue형식으로 Worker Process에게 전달합니다.

Event들은 queue에 담긴 상태에서 비동기 상태로 대기하고 Worker Process는 하나의 스레드로 Event를 꺼내서 처리합니다.

Worker Process는 처리할 요청이 시간이 오래 걸릴 것 같으면 스레드 풀에 Event를 위임하고 다른 Event를 처리합니다.

  • AWS EC2에서 Nginx 설정하기

Ubuntu를 사용한다는 가정하에 설명하겠습니다.

 

- Nginx 설치 :

sudo apt install nginx

 

EC2에 접속한 뒤 위 명령어를 입력하면 /etc에 nginx 디렉토리가 생긴 걸 확인할 수 있습니다.

# nginx 위치로 이동
cd /etc/nginx

 

- nginx.conf 수정 :

/etc/nginx로 들어가면 nginx.conf 파일이 있습니다.

저희는 nginx.conf 설정을 직접 사용하지 않고 sites-enabled 디렉토리를 생성하여 그 안에 있는 설정 파일들을 사용할 것이기 때문에 nginx.conf의 server관련 설정은 지워줍니다.

# 관리자 권한으로 vi 에디터 실행
sudo vi nginx.conf

그리고 include /etc/nginx/conf.d/*conf;

밑에 include /etc/nginx/sites-enabled/*.conf; 를 추가해 줍니다.

...

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;

 

- sites-available, sites-enabled 설정 :

설정 파일들을 편하게 관리하기 위해 sites-available 디렉토리에 설정 파일들을 생성하고 이들과 연결되는 symbolic link를 sites-enabled에 추가할 것입니다.

그렇기 때문에 /etc/nginx 내부에 sites-available과 sites-enabled를 생성해 주고 sites-available 디렉토리에 설정파일을 생성할 것입니다.

sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
# vi 에디터를 통해 설정파일 생성, 편집을 동시에 진행
# 설정 파일 이름은 원하는데로 설정
sudo vi /etc/nginx/sites-available/####.conf

 

####.conf는 다음과 같이 입력합니다.

server {
  listen 80;

  location / {
    root /home/ubuntu/#서빙할 파일의 위치;
    index #index파일로 사용할 파일 이름;
    try_files $uri $uri/ /#파일이나 디렉토리가 존재하지 않을 때 라우팅할 파일 이름;
    error_page 405 = $uri; # 405에러 발생 시 현재 요청된 URI를 반환
  }

  # /api로 시작하는 요청을 처리
  location /api {
    proxy_set_header X-Real_IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass #API Server가 동작하는 주소;
  }
}

':wq' 또는 ':x'를 통해 수정한 내용을 저장하고 vi 에디터에서 나올 수 있습니다.

 

- symbolic link 생성 :

sudo ln -s /etc/nginx/sites-available/####.conf /etc/nginx/sites-enabled/####.conf

위의 명령어를 통해 sites-enabled에 symbolic link를 생성합니다.

 

- nginx 가동 :

sudo service start nginx

 

위 명령어를 통해 nginx를 가동하고, 설정파일을 변경하면

sudo service restart nginx

 

명령어를 통해 재가동해야 합니다.

참    고    자    료

- Nginx란 무엇인가? | 안주형

 

- Nginx란? | 묠니르묘묘

 

- AWS EC2 서버 생성 + nginx 설정 | I_love_friedeggs

728x90
반응형

'Computer Science > Web' 카테고리의 다른 글

WAS  (2) 2024.04.01
Web Server  (0) 2024.03.16