user nginx; //NginX 실행권한
worker_processes 1; //Nginx프로세스 실행가능 수 

pid /var/run/nginx.pid; //Nginx pid 저장 위치

/* NGINX의 특징인 비동기 이벤트 처리 방식에 대한 옵션을 설정한다 */
events { 
    worker_connections  1024; //하나의 프로세스가 처리할 수 있는 커넥션의 수
    # multi_accept on; (디폴트값 : off) 
}

/* http 블록 */
http { 
    include       /etc/nginx/other_settings.conf;
    default_type  application/octet-stream;
    /* server 블록 */
    server {
        listen       80; //port
        location / {
            root   html;
            index  index.html index.htm;
        }
        
        location ^~ /admin/ { // url path /admin을 제외한 나머지는 블록안에 설정을 따른다.
			index index.php;
			access_log off;
		}
    }
    
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on; 
    keepalive_timeout  65;
    #gzip  on; 
    include /etc/nginx/conf.d/*.conf;
}

worker_processer : 기본 값은 1이지만 CPU가 2개 이상의 코어를 갖는다면 이 값을 증가시키도록 권장합니다.

include : include 지시어는 특정 파일을 포함하는 기능을 수행합니다. 지시어가 있는 바로 그 위치에 해당 파일 내용이 삽입됩니다. 

최대 접속자수 = (worker_processes) X (worket_connections)

keepalive_timeout : 접속시 커넥션을 몇 초동안 유지할지에 대한 설정값. 이 값이 높으면 불필요한 커넥션(접속)을 유지하기 때문에 낮은값 또는 0을 권장한다. (default=10)

servers token : NGINX의 버전을 숨길것인가에 대한 옵션이다. 보안상 주석을 제거하여 설정하는 것이 좋다.

http 블록 안에는 한 개 이상의 서버 블록을 선언할 수 있습니다. 하나의 server 블록은 하나의 가상 호스트를 구성합니다.

 

코어 모듈 지시어

코어 모듈 지시어 대부분은 환경 설정 파일의 루트에 넣어야 하며 오직 한번만 사용할 수 있습니다. 하지만 일부는 여러 가지 문맥으로 유효하게 사용할 수 있는데, 그런 경우에는 환경 설정 파일의 루트에 지시어명과 함께 유효 문맥의 목록이 나타나며 이때도 마찬가지로 한번만 사용할 수 있습니다.

1. error_log (문맥: main, http, server, location)

error_log /file/path level;

가장 상세한 로그 레벨부터 차례로 debug, info, notice, warn, error, crit가 됩니다. 애플리케이션, HTTP 서버, 가상 호스트, 가상 호스트 디렉토리 각각에 대해 다른 레벨로 에러 로그를 설정할 수 있다.

로그 출력 방향을 /dev/null로 전환하면 에러 로그를 해제하는 것과 같은 효과를 얻을 수 있습니다. 환경 설정 파일의 루트 부분에 다음의 지시어를 사용합니다.

error_log /dev/null crit;

2. master_process 

master_process on;

on으로 설정하면 엔진엑스는 다수의 프로세스, 즉 하나의 메인 프로세스(마스터 프로세스)와 여러 개의 작업자 프로세스를 시작할 수 있습니다. off로 해제시키면 엔진엑스는 단일 프로세스만으로 작동합니다. 

3. thread_stack_size

thread_stack_size 1m;

스레드 스택의 크기를 정의합니다.

4. timer_resolution

timer_resolution 100ms;

내부 클록을 동기화하기 위해 gettimeofday() 시스템 호출 사이의 간격을 제어합니다. 이 값을 지정하지 않으면 커널 이벤트 알림이 있을 때마다 클록이 동기화됩니다.

5. worker_threads

worker_threads 8;

작업자 프로세스당 스레드 수를 정의합니다. 스레드는 기본적으로 사용이 해제돼 있습니다. 이고르 쉐프에 의하면 엔진엑스는 경량 프로세스로 구현됐으며, 아직은 멀티스레드를 완전히 지원하지 않는 것으로 알려져 있습니다.

6. worker_cpu_affinity

worker_cpu_affinitty 1000 0100 0010 0001;

worker_cpu_affinitty 10 10 01 01;

worekr_cpu_affinitty;

이 지시어는 worker_processes와 결합해 작동하며 CPU 코어와 작업자 프로세스의 관계에 영향을 줍니다. 작업자 프로세스 수만큼 숫자가 나열되며, 각 숫자의 자리 수는 CPU 코어 수와 같습니다.

CPU 친화성(affinity)은 멀티코어 CPU를 위해 권장하는 것일 뿐 하이퍼 스레딩(Hyper-Threading)(하나의 CPU가 2개 이상의 논리적 CPU처럼 작동하게 하는 기술로서 CPU 제조사 인텔의 용어다. 약칭 HT HTT라고도 하며 이는 자사의 CPU 제품에 구현된 동시 멀티스레딩 기술을 지칭한다)과 같은 기술을 사용하는 CPU를 대상으로 하는 것은 아닙니다.

7. worker_priority

worker_priority 0;

-20(가장 높음)부터 19(가장 낮음)까지의 숫자로 작업자 프로세스의 우선 순위를 정의합니다. 기본 값은 0입니다. 커널 프로세스는 우선순위 -5 수준에서 실행되므로 우선순위를 -5 이하로 설정하는 것은 권장하지 않습니다.

8. worker_processes (기본값: 1)

worker_processes 4;

작업자 프로세스 수를 정의합니다. 엔진엑스는 클라이언트 요청을 여러 개의 프로세스로 나눠 처리합니다. 기본 값은 1이지만 CPU가 2개 이상의 코어를 갖는다면 이 값을 증가시키도록 권장합니다.

또한 I/O 동작이 느려 프로세스가 멈춰 기다리는 상태가 되면 이때 들어오는 요청은 다른 작업자 프로세스에 위임될 수 있습니다.

9. worker_rlimit_core

worker_rlimit_core 100m;

작업자 프로세스당 코어 파일의 크기를 정의합니다.

10. worker_rlimit_nofile

worker_rlimit_nofile 10000;

작업자 프로세스가 동시에 사용할 수 있는 파일 수를 정의합니다.

11. worker_rlimit_sigpending

worker_rlimit_sigpending 10000;

사용자(호출 프로세스의 사용자 ID)당 대기할 수 있는 시그널 수를 정의합니다. 대기열(queue)이 꽉 차면 이 한계치를 넘은 시그널은 무시됩니다.

 

이벤트 모듈

이벤트 모듈은 네트워크 작동 환경을 설정하는 지시어를 제공합니다. 일부 매개변수는 애플리케이션 성능에 중요한 영향을 미칩니다.

다음 목록에 나타나는 모든 지시어는 반드시 환경 설정 파일의 맨 앞에 있는 events 블록 안에서만 사용해야 합니다. 이 지시어들은 어떤 다른 장소에서도 나타날 수 없습니다.

1. accept_mutex

accept_mutex on;

LISTEN 소켓을 오픈하기 위한 accept 뮤텍스의 사용/해제를 설정합니다.

2. accept_mutex_delay

accept_mutext_delay 500ms;

자원의 획득을 다시 시도하기 전에 작업자 프로세스가 기다려야 하는 시간의 양을 정의합니다. accept_mutex 지시어가 off로 설정돼 있으면 이 값은 사용되지 않습니다.

3. worker_connections

worker_connections 1024;

작업자 프로세스가 동시에 처리할 수 있는 접속 수를 정의합니다.

 

필요한 조정

즉각적인 변경이 필요한 일부 환경 설정 지시어와 설정 값을 살펴보겠습니다.

1. user root root;

이 지시어는 작업자 프로세스가 루트로 실행되게 합니다. 작업자 프로세스가 파일 시스템의 모든 사용권한을 얻게 되므로 보안상 위험합니다.

2. worker_processes 1;

이 설정은 단 하나의 작업자 프로세스만 생성합니다. 그것은 곧 모든 요청을 단 하나의 실행 흐름으로 처리하겠다는 것을 의미하며, 한편으로는 오직 하나의 CPU 코어에게만 실행을 위임한다는 의미도 있습니다. CPU 코어 하나에 최소한 한 개의 프로세스가 배정되게 이 값을 증가시킬 것을 강력히 권장합니다. 권장 값은 worekr_processes 4; (서버에 4코어 CPU가 장착돼 있는 경우)입니다.

3. worker_priority 0;

기본적으로 작업자 프로세스는 보통 수준의 우선순위로 실행됩니다. 시스템이 동시에 다른 작업을 수행 중이라면 엔진엑스 작업자 프로세스에 더 높은 우선순위를 부여하길 바랄 수 있습니다. 이런 경우에는 우선순위 값을 감소시킵니다. 값이 작을수록 더 높은 우선순위를 갖습니다. 가장 높은 우선순위 값인 -20부터 가장 낮은 우선순위 값인 19까지 값을 정할 수 있습니다. 얼마의 우선순위 값이 적당한지는 전적으로 서버 상황에 달려있기 때문에 권장 값을 정할 수는 없습니다. 하지만 커널 프로세스의 기본 우선순위인 -5 아래로는 설정하지 않도록 합니다.

4. log_not_found on;

이 지시어는 엔진엑스가 404 에러를 로그 파일에 기록할지 여부를 정합니다. 물론 이런 에러는 누락된 자원에 대한 정보를 제공하는 이점은 있지만, 대부분 웹브라우저가 파비ㅏ콘에 접근하려고 하거나 로봇이 인덱싱 명령에 접근을 시도하기 때문에 발생하는 경우가 많습니다. 로그 파일을 지저분하게 만드는 관습적인 파일에 대해서는 log_not_found를 해제하길 권장합니다. 하지만 서버 레벨에서 해제하지 않도록 합니다.

5. worker_connections 1024;

이 설정은 작업자 프로세스 수와 결합돼 서버가 동시에 수용할 수 있는 전체 접속 수를 결정합니다. 네 개의 작업자 프로세스를 사용 중이라면 각 프로세스가 1,024개의 접속을 수용하므로 서버는 총 4,096개의 동시 접속을 처리합니다. 이 설정은 하드웨어 구조와 성능에 맞게 조정할 필요가 있습니다. RAM이 더 많고 CPU 성능이 더 좋을수록 더 많은 동시 접속을 수용할 수 있습니다.

 

ssl 설정

proxy protocol 설정

로드밸런싱 설정

'서버 > NginX' 카테고리의 다른 글

비동기 Event-Driven 방식  (0) 2020.01.17
NginX 특징  (0) 2020.01.17

+ Recent posts