nginx.conf 파일 기본 구조와 지시어 살펴보기
nginx.conf는 낯설어!
nginx.conf
nginx 모듈을 설치하고 나면 prefix 경로 하위에 nginx.conf 파일이 생성된다.
처음 설정되는 nginx.conf 파일을 살펴보자.
✏️ prefix 경로는
nginx -V명령어로 확인할 수 있다.
nginx.conf 구조
1 | user nginx; |
중괄호로 감싸고 있는 것이 하나의 블럭이다. 이 파일에서 바로 보이는 블럭은 http 블럭과 events 블럭이다.
블럭 안에서 선언한 지시어는 해당 블럭에서만 사용할 수 있다. work_connections 지시어는 events 블럭에서만 의미를 가진다.
또한, 블럭은 중첩될 수 있으며 자식 블럭은 부모 블럭의 지시어에 영향을 받는다. http 블럭 안에는 보통 server 블럭이 있는데 http 블럭에서 선언한 keepalive_timeout은 server 블럭에도 영향을 준다.
파일의 최상단은 메인 블럭이라고 부른다. 현재 메인 블럭에는 user, work_process , error_log, pid 지시어가 있다.
nginx.conf 기본 지시어 정리
가장 처음 세팅 되는 지시어를 블럭 단위 기준으로 정리해보았다.
user와 worker_process처럼 main 블럭에서만 선언해야 하는 지시어도 있고, include 여러 블럭에도 사용할 수 있는 지시어도 있다.
- 참고
- 구문의 대괄호는 필수값이 아님을 의미합니다.
- 구문의 콤마는 또는을 의미합니다.
main 블럭
user- 구문 : user username [groupname];
- 설명 : 엔진엑스의 worker process를 시작시키는 사용자 계정과 그룹을 지정한다. 지정하지 않으면 master proceess 사용자인 root가 worker process 사용자가 된다. 현재 파일의 user는 nginx로, worker process의 user가 nginx인 것을 확인할 수 있다.
1
2
3
4# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 106 0.0 0.1 10496 3008 ? Ss 06:34 0:00 nginx: master process nginx
nginx 131 0.0 0.1 10936 3476 ? S 06:55 0:00 nginx: worker process
worker_process- 구문 : worker_process 숫자,auto;
- 설명 : worker process의 수를 지정한다. 엔진엑스가 프로세스 수를 적절히 설정하도록 auto를 사용할 수도 있다.
error_log- 구문 : error_log file/path/error_log.log level:
- 설명 : 에러 로그의 파일 경로를 지정한다. level은 debug, info, notice, warn, error 등이 있다.
pid- 구문 : pid logs/nginx.pid
- 설명 : 엔진엑스 데몬의 pid 파일 경로를 지정한다.
events 블럭
worker_connections- 구문 : worker_connections 숫자;
- 설명 : worker_process가 동시에 처리할 수 있는 연결 수를 지정한다. 서버의 성능에 따라 줄이거나 늘릴 수 있다.
http 블럭
include- 구문 : include 파일 경로(와일드 카드 * 가능)
- 설명 : 지정된 파일의 내용을 해당 블럭에 포함시킨다.
default_type- 구문 : default_type MIME타입
- 설명 : 응답 헤더 값의 적절한 MIME 타입을 types 블럭에서 찾고 없으면 default_type 값을 사용한다.
log_format- 구문 : log_format name
- 설명 : 로그파일의 로그 포맷 형식을 지정한다. 로그 포맷을 여러개 생성할 수 있으며, name을 통해 어떤 포맷을 적용할지 지정할 수 있다. 현재 선언된 log_format의 name은 main이며, access_log에서 아래와 같이 선언하여 포맷을 적용하고 있다.
1
access_log /var/log/nginx/access.log main; #main is log_format name
- 구문 : log_format name
access_log- 구문 : access_log file/path/access_log.log log_format_name
- 설명 : access 로그 파일의 경로와 로그 형식을 지정한다.
sendfile- 구문 : sendfile on,off
- 설명 : 활성화되면 엔진엑스는 sendfile 커널 호출을 사용해서 파일을 전송하고, 비활성화되면 스스로 파일을 전송한다.
keepalive_timeout- 구문 : keepalive_timeout 숫자
- 설명 : 서버가 유지되는 연결을 몇 초를 기다릴지 정의한다.
nginx.conf 웹 서버용 세팅
웹 서버 역할을 하기 위해서 사용되는 server 블럭과 location 블럭을 살펴보자.
server 블럭
server 블럭은 웹 사이트 하나를 선언할 수 있다.
http 블럭 하위에 정의하며, 하나의 http 블럭 안에 여러개의 server 블럭을 둘 수 있다.
1 | http { |
listen- 구문 : listen [주소][:포트][추가 옵션]
- 설명 : 웹 사이트를 제공하는 소켓을 여는데 사용하는 IP 주소나 포트를 지정한다.
- 추가 옵션 :
- default_server : 해당 주소, 포트로 들어온 모든 요청의 기본 웹 사이트로 지정
- ssl : 웹 사이트가 ssl을 통해 제공되도록 지정
- http2 : HTTP/2 프로토콜을 지원하도록 활성화
- proxy_protocol : 포트로 접속된 모든 네트워크 연결에 프로토콜을 활성화
server_name- 구문 : server_name 호스트명1 [호스트명2]
- 설명 : server_name과 맞는 첫 번째 server 블럭이 선택된다. 아무로 server 블럭도 요청 호스트명과 맞지 않다면, listen 지시어의 매개변수와 맞는 server 블럭을 선택한다. listen 지시어에 default 옵션이 활성화된 블럭에 우선권이 주어진다.
location 블럭
server 블럭이 호스트명과 포트로 정의했다면, location 블럭은 요청 값의 path 및 파일을 기준으로 정의한다.
하나의 server 블럭 안에는 여러 개의 location 블럭을 설정할 수 있다.
1 | server { |
- 조정부호
location 블럭 별로 path를 지정한다. path는 정규표현식 사용이 가능하다. 우선 부호를 살펴보자.=조정부호 : path가 지정된 패턴과 정확히 일치한다. 여기서는 정규식을 사용할 수 없다.- 조정부호 생략 : 지정된 패턴으로 시작해야 한다. 정규식을 사용할 수 없다.
~조정부호 : 정규식이 일치하고 대소문자를 구분한다.~*조정부호 : 정규식이 일치하고 대소문자를 구분하지 않는다.
index- 구문 : index file1 [file2]
- 설명 : 요청에 아무런 path도 없을 때, 기본으로 제공할 페이지를 정의한다.
exprires- 구문 : expires 숫자+날짜 기호
- 설명 : 파일의 캐시 유효 기간을 설정한다.
다음에는…
nginx 서버 운영 시, 가장 먼저 해야 할 nginx.conf 파일 내용을 살펴보았다.
다음 포스팅에서는 서버를 직접 세팅해보며 해당 지시어들이 어떻게 적용되는지 살펴보자!