04. Serving Static Content

2015/04/20 20:17

서버의 주요한 기능은 이미지나 HTML 파일과 같은 파일들을 제공하는 것이다. 여러분은 서로 다른 디렉토리(HTML 파일들이 있는 /data/www 디렉토리와 이미지를 포함하고 있는 /data/images 디렉토리) 있는 파일들을 서로 다른 요청에 의해서 제공하는 예제를 구현할 있다. 그렇게 하기 위해서는 configuration 파일을 수정하여 http block내에 있는 server block 2개의 location block 설정하면 된다.


먼저, /data/www 디렉토리를 생성하고 임의의 텍스트를 가진 index.html 파일을 저장하자. 그리고 /data/images 디렉토리를 생성하고, 임의의 이미지 파일을 위치시킨다.

다음으로 nginx configuration file open하면 이미 기본적으로 server block 여러 예제들이 포함되어 있다. (대부분 코멘트로 막혀 있다.) 이제 모두 코멘트로 막고, 새로운 server block 추가해 보자.


http {

server {

}

}


일반적으로, configuration file 요청을 받을 서로 다른 port server name으로 구분된 여러 server block 가질 있다. Nginx에서 request 처리할 server 결정하고, server block내에 정의된 location 지시어(directive) 파라미터와는 반대로 Request header 특화된 URI를 테스트한다.


Server block내에 다음 location block 추가한다.


location / {

root /data/www;

}


location block prefix "/" 시작하는 request URI 특화되어 있다. URI root directive 특화된 path 추가될 것이다. 따라서, 로컬 파일 시스템상의 요청된 파일은 /data/www 있다. 만약 여러 개의 매칭되는 location block 있다면, nginx 가장 prefix 선택한다. 위에서 제공된 location block 가장 짧은 prefix이다. 따라서, 모든 request에는 location block 사용된다.


다음으로, 두번째 location block 추가해 보자.


location /images/ {

root /data;

}


이것은 /images/ 시작하는 request 매칭될 것이다. (location / 역시 매칭되기는 하지만, 짧은 prefix이다.)

결과적으로 server block configuration 다음과 같다.


http {

server {

location / {

root /data/www;

}


location /images/ {

root /data;

}


}

}



이것은 이미 표준 포트 80으로 요청을 받는 동작하고 있는 server 설정이다. 따라서, localhost 접속할 있다. /images/ 시작하는 URI 요청에 대한 응답에서 server는 /data/images 디렉토리에 있는 이미지 파일을 보낼 것이다. 예를 들어, http://localhost/images/example.png 요청하면 nginx /data/images/example.png 파일을 리턴할 것이다. 만약 그런 파일이 없다면, nginx 404 error 리턴할 것이다. /images/ 시작하지 않는 request URI 대해서는 /data/www directory 맵핑된다. 예를 들어, http://localhost/some/example.html 요청에 대해서 nginx /data/www/some/example.html 파일을 리턴할 것이다.


새로운 configuration 적용하기 위해서는 아직 nginx 시작되지 않았으면 nginx start하고, 이미 nginx 시작했다면, master process reload signal 보낸다. 실행 command 다음과 같다.


nginx -s reload


기대한 대로 동작을 하지 않는 경우에는 access.log error.log에서 이유를 찾아볼 있다. 로그 파일들은 /usr/local/nginx/logs /var/log/nginx에서 찾아볼 있다.

03. Configuration File's Structure

2015/03/31 14:18
<설정 파일 구조>

Nginx 설정 파일 내의 directive(지시어)들에 의해 제어되는 모듈들로 이루어져 있다. Directive simple directive(단순 지시어) block directive(블록 지시어) 나누어져 있다. Simple directive space 구분되는 name, parameter 구성되어 있고, semicolon(;)으로 끝난다. Block directive simple directive 동일한 구조를 갖지만, semicolon으로 끝나는 대신에 괄호로 묶인다. (중괄호 사용 : '{' '}') Block directive 괄호 안에 다른 directive들을 가질 있다. 이것을 context라고 부른다. (ex. Events, http, server, location)


설정 파일에서 Context 밖에 위치하는 directive들은 main context 있는 directive 간주한다. Events, http main context 위치하고, http 안에 server 있고, server 안에 location 있다.


#표시 뒤에 오는 라인은 comment이다.

TAG

<Starting, Stopping, and Reloading Configuration>

Nginx 실행파일을 실행하여 시작한다. Nginx 실행된 이후에는 -s 파라미터를 가지고 다른 작업을 수행하도록 있다. 다음과 같은 문법을 갖는다.


nginx -s signal


Signal 다음 값을 가질 있다.

Stop : fast shutdown

Quit : graceful shutdown

Reload : 설정 파일 reload

Reopen : 로그 파일 reopen


예를 들어 현재 처리 중인 request 모두 처리하고 nginx 종료하고자 한다면 다음 command 실행하면 된다.


nginx -s quit


  • command nginx 실행할 때와 동일한 user 실행해야 한다.

설정 파일의 변경은 변경된 설정 파일을 reload command 통해서 nginx 전달해야 적용된다. 설정 파일을 reload하는 command 다음과 같다.


nginx -s reload


Master Process 설정 파일 reload signal 받으면 새로운 설정 파일에 대한 syntax validation 체크하고, 적용한다. 적용이 끝나면 master process 새로운 worker process 실행하고, 기존의 worker process에는 shutdown 요청을 보낸다. 과정 중간에 오류가 발생하면 master process 변경 사항을 roll back하고 계속해서 old worker process 작업을 수행한다. Old worker process shutdown 메시지를 받으면 새로운 connection 받는 것을 중지하고 현재 처리 중인 request 완료될 때까지 계속해서 서비스를 제공한다. 모든 처리 중인 request 완료되었을 , old worker process 종료된다.


Signal kill utility 같은 Unix tool 도움을 받아서 nginx 전달될 수도 있다. 경우 signal 주어진 process ID 통해서 직접적으로 nginx process에 전달된다. Process ID로는 nginx master process ID 사용한다. 기본적으로 nginx.pid /usr/local/nginx/log 폴더나 /var/run 폴더에 저장된다. 예를 들어서, master process ID 1628이라면, nginx graceful shutdown 위한 Quit signal 다음과 같이 보낼 있다.


kill -s QUIT 1628


모든 기동중인 nginx process 대한 리스트를 얻으려면 다음과 같이 ps utility 사용할 있다.


ps -ax | grep nginx


Nginx 보내는 signal 대한 자세한 정보는 Controlling nginx (http://nginx.org/en/docs/control.html) 통해서 얻을 있다.

TAG

01. Preface

2015/03/31 13:23

[여기에 있는 내용은 Nginx 홈페이지(http://nginx.org/en/docs/beginners_guide.html)에서 제공하는 초보자용 가이드(Beginner's Guide) 문서를 번역한 것이다. 원문 참조를 원한다면 홈페이지를 참조하기 바란다.]


가이드에서는 nginx 대한 개본적인 소개와 nginx 통해 수행할 있는 간단한 task들에 대해서 설명하고 있다. 독자들의 컴퓨터에 nginx 이미 설치되어 있다고 가정하고 있는데, 아직 설치되어 있지 않다면 Installing nginx (http://nginx.org/en/docs/install.html) 페이지를 참고하기 바란다. 가이드를 통해서 nginx start, stop, reload, nginx 설정 파일의 구조, nginx 통해서 static content 제공하는 방법, proxy server 설정하는 방법, FastCGI application 접속하는 방법들을 설명하고자 한다.


Nginx 하나의 master process 여러 개의 worker process 가지고 있다. Master process 주요 기능은 configuration 읽어서 처리하고, worker process들을 유지/관리하는 것이다. Worker process request 대한 실제 처리 작업을 수행한다. Nginx event-based model 채택했고, worker process 효율적인 request 분산을 위해서 OS-dependent mechanism 가지고 있다. Worker process 숫자는 설정 파일에 정의된다. 이용 가능한 CPU core 수에 맞춰서 자동으로 할당되거나 설정 파일에 정의된 값으로 고정된다.


Nginx nginx 모듈들의 작업은 설정 파일에 의해서 결정된다. 기본적으로 nginx 설정 파일 이름은 nginx.conf이고, 위치는 /usr/local/nginx/conf /usr/local/etc/nginx이다.