본문 바로가기

Development/Nginx

#3 Nginx의 기타 코어 HTTP 모듈

1. 단순 사이트를 위한 동적 SSI 사용

- 서버측 인클루드 기능(SSI, Server-Size Include)를 지원한다.

- 필요로 하는 작은 모듈단위의 페이지를 큰 페이지 안에 간단히 포함시킬떄 사용된다. block도 생성이 가능하며 include 지시어로 다른 자원을 포함시키거나 echo 지시어로 nginx 구문안에서 임의의 변수 값을 출력할 수도 있다.

server {
	...
	location / {
		ssi on;
		root /var/www/www.ggang9.com;
	}
}

the header




2. 특정 페이지 앞뒤에 콘텐츠 추가

- 적정인 헤더,푸터등을 자동적으로 추가해 주는 기능. (기본설치에서는 빠져있다.)

server {
	listen 80;
	server_name www.ggang9.com;
	location / {
		add_before_body	/red_block;
		add_after_body		/blue_block;
		...
	}
}
location /red_block/ {
	...
}
location /blue_block {
	...
}


3. 디렉토리 자동 색인 설정

- 자동적으로 특정 디렉토리의 자동 색인하여 준다.

server {
	...
	location / {
		root /var/www/www.ggang9.com;
		autoindex on;
		autoindex_exact_size on; <-- 개략적인 사이즈로 표시
		autoindex_localtime on; <-- Local Server Time 기준으로 파일스탬프 표시
	}
}


4. 무작위 웹 페이지 서비스

- 특정 디렉토리안에 있는 여러 웹페이지중 하나를 무작위로 선택하여 제공한다.

- A/B 테스트 방법론에 활용하기 좋음. http://en.wikipedia.org/wiki/A/B_testing

server {
	listen 80;
	...
	location / {
		...
		root /var/www/www.ggang9.com/test;
		random_index on;
	}
}


5. 사용자 식별 및 기록을 위한 쿠키 서비스

- 쿠키 모듈을 사용하기 위한 서버 섹션에 삽입되는 환경설정.

- userid_p3p는 웹사이트의 프라이버시 정책을 브라우저에게 알려준다. http://ko.wikipedia.org/wiki/P3P

userid		on; // 쿠키 모듈 활성화
userid_name	uid; // 클라이언트 쪽에 저장될 쿠키에 이름 부여
userid_domain	www.ggang9.com; // 주도메인
userid_path	/; // 경로
userid_expires	365d; // 만료기간
userid_p3p	'policyref="/w3c/p3pxml", CP="CUR ADM OUR NOR STA NID"';


6. 응답을 다른 코드로 재인코딩

- 웹페이지의 인코딩 방식을 실시간으로 변경할 수 있다.

- 아래 예제에서는 기본적으로 소스의 문자 세트가 koi8-r이고 인코딩이 charset과 다르면 재인코딩이 실행되도록 되어 있다.

charset			windows-1251;
source_charset		koi8-r;


7. 특정 콘텐츠 타이에 Gzip 압축 적용

- 사용자에게 전달하는 페이지를 Gzip 압축하는 많은 옵션을 제공한다.

- 압축에 사용되는 CPU의 양을 조절할 수 있는 level 값을 설정할수 있다!!

http {
	gzip on;
	gzip_min_length 1000;
	gzip_comp_level 6;
	gzip_proxied expired no-cache no-store private auth;
	gzip_type text/plain application/xml;
	gzip_disable "MSIE [1-6]\.";
	server {
		...
	}
}

- gzip_proxied에서 사용가능한 매개변수 리스트

 매개변수

 기능 

 off 

 모든 프록시 요청에 대해 압축을 적용하지 않는다. 

 expired 

 Expires 헤더가 캐싱을 금지하면 압축을 적용한다. 

 no-cache

 Cache-Control 헤더가 no-cache를 포함하면 압축을 적용한다.

 no-store

 Cache-Contorl 헤더가 no-store를 포함하면 압축을 적용한다.

 private

 Cache-Control 헤더가 private를 포함하면 압축을 적용한다.

 no_last_modified

 Last-Modified가 설정되어 있지 않으면 압축을 적용한다.

 no_etag

 ETag 헤더가 없으면 압축을 적용한다.

 auth

 Authorization 헤더가 있으면 압축을 적용한다.

 any

 모든 요청에 대해 압축을 적용한다.


8. 404등의 에러 페이지 설정

- Nginx는 사용자에게 뭔가 잘못됐다는 것을 알려주기 위해 기본 페이지를 이용해 모든 HTTP에러를 성공적으로 처리할수 있다.

- 사용자에게 서비스의 막다른 골목을 보여주기 보다는 다시 서비스로 접근 할수 있는 적절한 에러페이지를 제공해 줘야 한다.

- 아래 예제에서 @지시어는 named location 를 정의하게 되며 주로 redirection 처리 용도로 사용된다.

location @fallback {
	proxy_pass http://backend;
}

error_page 404 /404.html; // 404 에러 발생시 간단히 에러 페이지로 맵핑 시킴.
error_page 502 502 502 /50x.html; // 여러 에러 코드를 하나의 페이지로 맵핑이 가능함.
error_page 403 http://www.ggang9.com/forbidden.html; // 외부 사이트로도 맵핑이 가능하다.
error_page 404 = @fallback; // 다른 위치의 페이지로 매핑이 가능하다.
error_page 404 =200 /.empty.gif; // 정상적인 200 응답을 주고 404에러 에러 페이지 이미지를 보여줄수도 있음.



엔진엑스로 운용하는 효율적인 웹사이트

저자
디판카 사카 지음
출판사
에이콘출판 | 2013-03-22 출간
카테고리
컴퓨터/IT
책소개
아파치를 대체하고 있는 강력한 웹서버 엔진엑스(Nginx)의 실...
가격비교

'Development > Nginx' 카테고리의 다른 글

#5 재작성에 관한 모든 것(2)  (0) 2014.02.03
#4 재작성에 관한 모든 것(1)  (0) 2014.01.29
#2 환경 설정하기  (0) 2014.01.15
#1 Nginx 설치하기  (0) 2014.01.06