NginX 추가하기 전에 뭔지 알아보자.

wonjun.Aden·2022년 9월 22일
1
post-thumbnail

Nginx란?

비동기 이벤트 기반구조의 경량 웹 서버이다.
HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다.

클라이언트로부터 요청을 받았을 때 요청에 맞는 정적파일을 응답해주는 HTTP web server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 함.

Nginx 구조

  • 하나의 Master Process와 다수의 worker Process로 구성되어 실행된다.
  • 모든 요청은 worker process에서 처리한다.
  • nginx는 이벤트 기반 모델을 사용하고, worker process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메카니즘을 사용.
  • Master Process
    설정파일을 읽고, 유효성을 검사한다.
    worker Process를 관리한다.
  • Worker Process
    개수는 설정파일에서 정의되며, 정의된 프로세스 개수와 사용가능한 CPU 코어 숫자에 맞게 자동으로 조정된다.

Nginx 설정

설정 파일 구조

Nginx는 지시어에 부여하는 값에 의해 작동한다.
메인 설정 파일 경로는 /etc/nginx/nginx.conf이다.
nginx의 지시어(directive)에는 두가지가 있다.

  • simple directive : 이름, 값이 있고 세미콜론으로 끝난다.
  • block directive : simple directive의 구조에 블록을 감싼 형태의 지시어이다.
  • block directive는 해당 directive 안에 또 다른 block directive가 포함될 수 있다.
  • include 지시어는 특정파일을 포함하는 기능을 수행한다.

메인설정 - /etc/nginx/nginx.conf

# worker 프로세스를 실행할 사용자 설정
# - 이 사용자에 따라 권한이 달라질 수 있다.
user  nginx;
# 실행할 worker 프로세스 설정
# - 서버에 장착되어 있는 코어 수 만큼 할당하는 것이 보통, 더 높게도 설정 가능
worker_processes  auto;

# 오류 로그를 남길 파일 경로 지정
error_log  /var/log/nginx/error.log warn;
# NGINX 마스터 프로세스 ID 를 저장할 파일 경로 지정
pid        /var/run/nginx.pid;


# 접속 처리에 관한 설정을 한다.
events {
    # 워커 프로레스 한 개당 동시 접속 수 지정 (512 혹은 1024 를 기준으로 지정)
    worker_connections  1024;
}

# 웹, 프록시 관련 서버 설정
http {
    # mime.types 파일을 읽어들인다.
    include       /etc/nginx/mime.types;
    # MIME 타입 설정
    default_type  application/octet-stream;

    # 엑세스 로그 형식 지정
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # 엑세스 로그를 남길 파일 경로 지정
    access_log  /var/log/nginx/access.log  main;

    # sendfile api 를 사용할지 말지 결정
    sendfile        on;
    #tcp_nopush     on;

    # 접속시 커넥션을 몇 초동안 유지할지에 대한 설정
    keepalive_timeout  65;

    # (추가) nginx 버전을 숨길 수 있다. (보통 아래를 사용해서 숨기는게 일반적)
    server_tokens off

    #gzip  on;
    
    ##
    # Virtual Host Configs
    ##

    # /etc/nginx/conf.d 디렉토리 아래 있는 .conf 파일을 모두 읽어 들임
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Reverse Proxy

Nginx는 리버스 프록시로도 활용할 수 있다.
리버스 프록시란 외부 클라이언트에서 서버로 접근 시, 중간에서 중개자 역할을 하여 내부 서버로 접근할 수 있도록 도와주는 서버다.

Reverse Proxy의 장점

보안

외부 사용자로부터 내부망에 있는 서버의 존재를 숨길 수 있다.
모든 요청은 리버스 프록시 서버에서 받으며, 매핑되는 내부 서버로 요청을 전달한다.
Nginx는 SSL 설정도 가능하다.

로드 밸런싱

리버스 프록시 서버가 내부 서버에 대한 정보를 알고 있으므로, 각 서버의 상태에 따라 부하를 분산시키며 요청을 전달할 수 있다.

server {
    listen [::]:80;
    listen 80;

    server_name A의 도메인주소;

    location / {
        proxy_pass http://localhost:3000;
    }
}

참고자료
https://www.herlitz.io/2022/03/27/running-optimizely-cms-behind-nginx-reverse-proxy/
https://icarus8050.tistory.com/57

profile
아프리카의 BackEnd Developer 장원준입니다.

0개의 댓글