성장에 목마른 코린이

[배포] nginx.conf 옵션 본문

배포

[배포] nginx.conf 옵션

성장하는 코린이 2022. 11. 4. 14:59
728x90

어제부터 오늘까지 회사의 서비스중 하나를 배포 실습해보는 과정을 거쳤습니다.

Nginx 자체를 회사에서 처음 알게되고, conf에 사용되는 옵션을 너무 몰라 배포하기까지 애를 많이 먹었습니다.

그래서 오늘은 Nginx 기본적인 활용에 앞서서 conf에 사용되는 옵션들을 소개해 드리려합니다.

주로 사용되는 옵션은 정해져있지만, 이 옵션들이 어떤 역할을 하는지에 대해 알아야 상황에 맞게 커스텀 할 수 있기 때문입니다.

user  nginx; # 프로세스의 실행되는 권한. 보안상 root를 사용하지 않습니다.
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

# event 블록
events {
    worker_connections  1024;
}

# http 블록
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    upstream docker-server {
        server server:8080;
    }
    # server 블록
    server {
        listen 80;
        server_name localhost;
		
        # location 블록
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ /index.html =404;
        }
        location /api {
            proxy_pass         http://docker-server;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location /socket {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_pass http://docker-server;
        }
    }
    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        on;
	server_tokens     off;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

nginx.conf 구성 및 옵션

1. Core 모듈

코어 모듈은 대부분 환경 파일의 최상단에 위치하며 한번만 사용할 수 있습니다.

nginx의 기본 동작 방식을 정의합니다.

 

1. user: 프로세스의 실행되는 권한. 보안상 root를 사용하지 않습니다.

2. worker_processes: 몇 개의 워커 프로세스를 생성할 것인지를 지정하는 지시어입니다.

1이면 모든 요청을 하나의 프로세스로 실행하겠다는 뜻으로,

CPU 멀티코어 시스템에서 1이면 하나의 코어만으로 요청을 처리하는 것이 됩니다. 보통 auto로 놓는 경우가 많습니다.

3. error_log: 로그 레벨을 설정하는 지시어. 로그레벨은 [ debug | info | notice | warn | error | crit ] 같은 종류가 있습니다.

4. pid: nginx의 마스터 프로세스 id정보가 저장됩니다.

2. events 블록

주로 네트워크 동작에 관련된 설정하는 영역으로, 이벤트 모듈을 사용합니다.

 

1. worker_connections: 하나의 프로세스가 처리할 수 있는 커넥션의 숫자

3. http 블록

웹 서버에 대한 동작을 설정하는 영역으로, server 블록과 location 블록의 root 블록 입니다.

1. include: 

옵션 항목을 설정해둔 파일의 경로를 지정하는데 보통 파일 확장명과 MIME 타입 목록을 지정합니다.

2. default_type: 

옥텟 스트림 기반의 http를 사용한다는 지시어

3. upstream 블록:

origin 서버라고도 하는데, 여기서는 WAS, 웹 어플리케이션 서버를 의미하며 nginx downstream에 해당한다고 할 수 있습니다.

nginx와 연결한 웹 어플리케이션 서버를 지정하는데 사용됩니다. 

하위에 있는 server 지시어는 연결할 웹 어플리케이션 서버의 host주소:포트를 지정합니다.

4. server 블록

하나의 웹사이트를 선언하는 데 사용됩니다.

server 블록이 여러 개이면 한 개의 머신(호스트)에 여러 웹사이트를 서빙할 수 있습니다. 

이러한 개념을 가상 호스팅(Virtual Host)이라고 합니다.

실제로는 호스트는 1개인데, 여러 개 인것처럼 보이게 만드는 것입니다.

 

1. listen: 이 웹 사이트가 바라보는 포트를 의미합니다.

2. server_name: 클라이언트가 접속하는 서버(주로 도메인). 

이것과 실제로 들어온 request header에 명시된 값이 일치하는지 확인해서 server를 분기해줍니다.

5. location 블록

server 블록 안에서 특정 웹 사이트의 url을 처리하는데 사용합니다.

예를 들어 https://web.com/internal https://web.com/external로 접근하는 요청을 다르게 처리하고 싶을 때 사용합니다. 

내부의 root는 웹사이트가 바라보는 root 폴더의 경로를 의미합니다.

 

1. server_tokens: 헤더에 nginx버전을 숨기는 기능을 합니다. 보안상 off로 설정을 권장합니다.

2. keepalive_timeout: 접속시 커넥션 유지 시간을 지정합니다.

 

 

[Nginx] 엔진엑스 기본 환경 설정

일반적으로 환경 설정 파일은 관리자가 편집하거나 프로그램으로 분석할 수 있는 텍스트 파일로, 여러 가지 값을 지정해 프로그램의 작동 방법을 결정합니다. 리눅스 기반 운영체제에서는 애플

12bme.tistory.com

참조:

Comments