Daylogs/Nginx

Nginx HTTP Server - 3. 환경설정

ohgyun 2014. 1. 26. 14:27


## 기본 설정


기본 설정 파일의 경로는 `/usr/local/nginx/conf/nginx.conf`


- `#`는 주석

- 지시어는 항상 세미콜론(`;`)으로 끝난다.

- 엔진엑스는 모듈 구조로 작동하며, 각 모듈은 특정 지시어의 묶음 형태로 제공된다.

     가장 기본적인 지시어들은 코어 모듈에 포함돼 있다.

- `include` 지시어는 특정 파일을 포함하는 기능

     파일 글로빙을 지원한다. 예) include /sties/*.conf

- `include`를 할 때 파일이 존재하지 않으면 환경 설정 테스트에 실패한다.


- 설정 파일의 관습

     - nginx.conf : 기본 환경 설정

     - mime.types : 파일 확장명과 MIME 타입 목록

     - fastcgi.conf : FastCGI 관련 설정

     - proxy.conf : 프록시 관련 설정

     - sites.conf : 엔진엑스에 의해 서비스되는 가상 호스트 웹사이트의 설정.

                         도메인마다 파일을 분리할 것을 권장한다.


### 지시어 블럭


지시어는 모듈에 의해 도입된다.

새 모듈을 활성화하면 그 모듈에 포함된 지시어들을 사용할 수 있다.


````

events {

    worker_connections 1024;

}

````

와 같은 설정이 있다면, 이는 이벤트 모듈에서 사용하는 환경 설정 정보이다.


블럭은 중첩될 수 있으며, 설정은 자식 블럭에 상속된다.


http {

  server {

    …

    access_log /var/log/nginx/example.com.log;


    location ^~ /admin {

        # access_log 는 여기에도 상속된다.

    }

  }

}



### 지시어 약자


- 크기 관련 : k 또는 K (킬로바이트), m 또는 M (메가바이트)

- 시간 관련: ms (밀리초), s (초), m (분), h (시간), d (일), w (주), M (월), y (연)

                    (기본 시간 단위는 초이다)


### 변수


특정 모듈에서 정의한 변수를 `$변수명` 형태로 가져올 수 있다.


### 문자열 값


큰 따옴표나 작은 따옴표 안에 넣는다.




## 기본 모듈 지시어


### 기본 모듈이란?


엔진엑스 기본 기능의 매개변수를 정의한다.

컴파일할 때 제외시킬 수 없으며, 기본 모듈이 제공하는 지시어와 블록은 항상 사용 가능하다.


- 코어 모듈: 프로세스 관리, 보안과 같은 필수적인 기능과 지시어

- 이벤트 모듈: 네트워크 기능의 내부 작동 방식을 구성

- 환경설정 모듈(Configuration module) : 인클루드 체계를 사용하도록 함



### 엔진엑스의 프로세스 구조


- 엔진엑스를 시작하면 마스터 프로세스(master process)가 뜬다.

  (현재 사용자/그룹 사용권한으로 실행. 주로 root/root)


- 마스터 프로세스는 작업자 프로세스(worker process)를 생성하며,

   클라이언트 요청은 처리하지 않는다.


- 작업자 프로세스의 사용자와 그룹은 설정 파일에 정의한 것에 따르며, 없다면 `nobody`이다.



### 코어 모듈 지시자


자세한 건 책이나 사이트 참고.

기억할 만한 것만 메모해둔다.


- working_directory

     작업자 프로세스용으로 사용되는 작업 디렉토리.

     코어 파일의 위치를 정의하는 데 사용하는데, 작업자 프로세스 사용자 계정(user 지시어)은

     코어 파일을 작성할 수 있게 이 디렉토리에 대한 “쓰기” 권한이 있어야 한다.


     [ ]로그를 쓰거나 이럴 때 작업자 프로세스의 권한 이슈가 생길 가능성이 있겠다.

          이 때 http://stackoverflow.com/questions/18714902/nginx-on-ubuntu-permission-denied 를 참고해보자. 




## 프로파일에 맞춘 환경 설정


기본 설정 파일: /usr/local/nginx/conf/nginx.conf


기본 값 중 수정해야 할 정보


- user root root;

     작업자 프로세스가 루트로 실행되는 설정인데, 작업자 프로세스가 파일 시스템의 모든 권한을 사용하게 되므로 보안상 위험하다. 별도의 사용자 계정(예: `user nginx nginx`)을 만드는 게 좋다.


- worker_process 1;

     작업자 프로세스의 개수가 한 개란 의미다. CPU 코어 개수만큼 할당하는 게 좋다.

     

     - CentOS 에서는 `cat /proc/cpuinfo | grep processor` 로 확인할 수 있다.

     

- log_not_found on;

     404 에러를 로그 파일에 기록할 지에 대한 여부.

     관습적인 파일(favicon.ico 나 robots.txt)에 대한 접근만 제거하자.


- worker_connections 1024;

     한 작업자 프로세스가 1024개의 동시 접속을 처리한다.

     작업자 프로세스의 개수가 4개라면 총 4096개의 동시 접속을 처리한단 의미다.


     이 지시어 값을 계산하는 간단한 공식은 없기 때문에 통신량 추정치에 대한 테스트가 필요하다.



## 서버 테스트


httperf: HP에서 만든 간단한 커맨드라인 성능 측정 도구

autobench: httperf를 펄로 래핑. 한계에 도달할 때까지 측정치를 올리며 테스트한다.

openwebload: 초당 접속자 수를 변경해가며 확인할 수 있다.




## 엔진엑스 바이너리 업그레이드


1. /usr/local/nginx/sbin/nginx 를 새것으로 대체한다.

2. 엔진엑스의 마스터 프로세스 pid를 찾는다.

3. `kill -USR2 PID` 마스터 프로세스로 USR 시그널을 보낸다. 이렇게 하면 지난 .pid 파일의 이름을 바꾸고 새 바이너를 실행함으로써 업그레이드가 개시된다.

4. `kill -WINCH PID` 명령으로 이전 마스터 프로세스에 WINCH 시그널을 보낸다. 이렇게 하면 이전 작업자 프로세스들은 정상적인 종료 절차에 들어간다.

5. 모든 이전 작업자 프로세스들이 종료됐음을 확인하고 나서, `kill -QUIT PID`를 사용해 이전 마스터 프로세스에 QUIT 시그널을 보낸다.



=====

Nginx HTTP Server - 1. 작업환경 준비하기

Nginx HTTP Server - 2. 설치

Nginx HTTP Server - 3. 환경설정

Nginx HTTP Server - 4. HTTP 환경설정

Nginx HTTP Server - 5. 모듈 환경설정

Nginx HTTP Server - 6. 참고/주의



반응형