Nginx HTTP Server - 3. 환경설정
## 기본 설정
기본 설정 파일의 경로는 `/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 - 4. HTTP 환경설정
Nginx HTTP Server - 5. 모듈 환경설정