Nginx HTTP Server - 4. HTTP 환경설정
## 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¶m2 (일치. 질의 문자열은 패턴 매칭과 상관없다)
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 - 4. HTTP 환경설정