Daylogs/Nginx

Nginx HTTP Server - 4. HTTP 환경설정

ohgyun 2014. 1. 26. 14:29

## HTTP 코어 모듈


HTTP 서버의 핵심적인 블럭, 지시어, 변수를 포함한다.

엔진엑스를 빌드할 때 기본적으로 포함된다.



## 대표 블럭


### 구조 블럭


HTTP 모듈은 아래와 같은 세 가지 새 논리적 블럭을 제공한다.

프로토콜 수준(http 블럭), 서버 수준(server 블럭), 요청 URI 수준(location)

 

- http

     이 블럭 안에서 엔진엑스의 HTTP 부문과 관련된 모든 모듈의 지시어와 블럭을 정의한다.


- server

     하나의 웹사이트를 선언하는 데 사용한다. (호스트별)

     http 블럭 안에서만 사용할 수 있다.


- location

     웹사이트의 특정 위치에 적용할 설정 그룹을 정의한다.

     server 블럭이나 다른 location 블럭 안에 삽입할 수 있다.



## 모듈 지시어


표현 방법: 지시어 <문맥>


### 소켓과 호스트 환경


listen <server>

     웹사이트용 리스닝 소켓이 사용하는 IP 주소와 포트를 설정


server_name <server>

     server 블럭은 한 개 이상의 호스트명을 지정한다.

     HTTP 요청 헤더의 HOST 값으로 판단한다.



### 경로와 문서


root <http, server, location, if>

     웹사이트 방문자에게 서비스되는 파일이 위치한 문서 루트를 정의한다.

     예) root /home/foo/public.html


alias <location>

     특정 location 내에서 문서의 위치를 변경하는 용도로 사용한다.


error_page <http, server, location, if>

     응답 코드에 대한 URI를 변화시키거나 응답 코드를 대체한다.

     예) error_page 500 501 502 503 /server_error.html


index <http, server, location>

     인덱스 파일을 정의한다.



### 클라이언트 요청


keepalive_requests <http, server, location>

     하나의 킵얼라이브 접속을 통해 서비스되는 최대 요청 수 (기본값 100)


client_max_body_size <http, server, location>

     클라이언트 요청 바디의 최대 크기를 정한다. (기본값 1m)



### 마임 타입


엔진엑스는 마임 타입 환경 설정을 돕는 두 개의 특별한 지시어를 제공한다.

여기에 정의한 값에 따라 응답의 `content-type` 헤더값이 설정된다.

기본 마임 값은 `mime.types` 파일로 별도로 둔다.


types <http, server, location>

     '마임타입 확장자 확장자’ 형태로 정의할 수 있다.

     예)

     types {

          text/html html;

          image/gif gif;

     }


default_type <http, server, location>

     기본 마임 타입을 정의한다. (기본값 text/plain)



### 한도와 규제


limit_except <location>

     특정 메서드만 허용한다.

     예)

     location /admin/ {

          limit_except GET POST {

               allow 192.168.1.0/24;

               deny all;

          }

     }


satisfy <location>

     클라이언트에 허용된 제한이 AND 인지 OR인지 결정한다.


internal <location>

     location 블럭을 내부용으로 지정한다.



### 파일 처리와 캐싱


direction <http, server, location>

     파일 크기가 지정한 값보다 클 경우 직접 입출력 방식으로 파일을 읽어 들인다.

     데이터를 읽을 때 캐싱 과정을 거치지 않고 직접 메모리로 읽어 들인다. (기본값 off)

     예) direction 5m;



### 기타 지시어


log_not_found <http, server, location>

     404 HTTP 에러의 기록 설정을 설정하거나 해제한다.


msie_padding <http, server, location>

     응답 바디가 512바이트보다 작으면 IE에서 자체 에러 페이지를 표시하기 때문에,

     512바이트까지 패딩을 추가한다. (기본값 off)


msie_refresh <http, server, location>

     응답 코드가 301/302이면 IE에서도 리다이렉트 할 수 있게 refresh 메타 태크를 포함한다.

     (기본값 off)


resolver <http, server, location>

     엔진엑스가 채택할 네임서버를 명시적으로 지정한다.



## 모듈 변수


### 요청 헤더


$http_host

$http_user_agent

$http_referer

$http_x_forwarded_for (클라이언트가 프록시 뒤에 있을 때 클라이언트의 실제 IP 주소)

$http_cookie

$http_...



### 응답 헤더


$sent_http_content_type

$sent_http_content_length

$sent_http_last_modeified

$sent_http_...



### 엔진엑스 생성 변수


$arg_XXX     GET 요청에서 사용한 쿼리값

$args      질의 문자열의 모든 인자의 묶음)

$binary_remote_addr     바이너리 데이터(4바이트)로 표현된 클라이언트 IP

$body_bytes_sent     응답 바디로 전송된 바이트 수

$content_length

$content_type

$cookie_XXX     쿠키 데이터의 특정값

$document_root     현재 요청에 대한 root 지시자

$document_uri     현재 요청의 URI. 내부에서 리다이렉트 되면 이 값도 변한다.

$host     HOST 헤더

$hostname     서버 컴퓨터 시스템의 호스트명

$is_args     질의 문자열이 있는지?

$limit_rate     limit_rate 지시어로 정의한 접속 당 전송률 한도

$nginx_version

$pid

$query_string     $args와 동일하다.

$remote_addr     클라이언트의 IP 주소

$remote_port

$realpath_root     클라이언트 요청의 문서 루트

$request_body     바디가 없을 경우 ‘-‘를 리턴

$request_body_file     요청 바디가 임시 파일로 저장된 경우, 파일의 경로

$request_completion     요청이 완료됐으면 OK, 아니라면 빈 문자열

$request_filename     현재 요청으로 서비스 중인 전체 파일명

$request_method

$request_uri     요청 원래의 URI. 변하지 않는다.

$scheme     요청에 따라 http 또는 https

$server_addr     서버의 IP 주소

$server_name     요청을 처리하는 동안 사용되는 server_name 지시어의 값

$server_port     요청 데이터를 수신한 서버 소켓의 포트 번호

$server_protocol     HTTP/1.0 또는 HTTP/1.2

$uri     $document_uri와 동일




## location 블럭


### 로케이션 변경자


요청 URI와 비교할 패턴을 지정할 수 있다.


location [=|~|~*|^~|@] pattern { … }


맨 앞에 오는 선택적 인자는 로케이션 변경자(location modifier)로 불리는 심볼로,

엔진엑스가 패턴을 비교하는 방법과 패턴의 속성(문자열 또는 정규식)을 정의한다. 



= : 지정 패턴과 정확히 일치

     예)

     server {

          server_name website.com;

          location = /abcd {


          }

     }


     http://website.com/abcd (일치)

     http://webstie.com/ABCD (대소문자 구분은 운영체제에 따른다)

     http://website.com/abcd?param1&param2 (일치. 질의 문자열은 패턴 매칭과 상관없다)

     http://website.com/abcd/ (불일치)



‘’ : 지정한 패턴으로 시작해야 한다.


     http://website.com/abcd/ (일치)

     http://website.com/abcde (일치)


~ : 정규표현식과 일치


~* : 대소문자를 구분하지 않으며 정규표현식과 일치


^~ : 지정한 패턴으로 시작해야 한다. 패턴이 일치하면 엔진엑스가 다른 패턴의 탐색을 중지한다.

     (정규표현식이 아닌 것에 주의한다)


@ : 이름가진 location 블럭을 정의한다. 내부 요청에 의해서만 접근할 수 있다.




### 검색 순서와 우선순위


우선순위가 높은 것과 매칭한다. 

블럭을 정의한 순서와는 관계가 없다.



우선순위


요청 URI가,


1. = 변경자를 갖는 location 블럭의 문자열과 일치

2. 변경자가 없는 location 블럭의 문자열과 일치

3. ^~ 변경자를 갖는 location 블럭의 시작 부분과 일치

4. ~ 또는 ~* 변경자를 갖는 location 블럭의 패턴과 일치

5. 변경자가 없는 location 블럭의 시작부분과 일치



사례)


server {

  server_name website.com;

  location /doc { (A) }

  location ~* ^/document$ { (B) }

}


http://website.com/document를 요청하면, (B)가 매칭



server {

  server_name website.com;

  location /document { (A) }

  location ~* ^/document$ { (B) }

}


http://website.com/document를 요청하면, (A)가 매칭 



server {

  server_name website.com;

  location ^~ /doc { (A) }

  location ~* ^/document$ { (B) }

}


http://website.com/document를 요청하면, (A)가 매칭 




=====

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. 참고/주의 

반응형