티스토리 뷰

Server/WebServer

apache httpd module

jacobbaek Jacob_baek 2012. 4. 3. 10:59

apache 에서 추가적인 기능 사용을 위해 모듈을 추가할 수 있다. 실제로 모듈을 새롭게 받아야 하는 경우도 있고 기존 disable 되어 있는 모듈을 enable 하여 사용할 수도 있다.


module 사용방법

리눅스의 경우는 configuration 당시 모듈을 지정하여 같이 컴파일 할 수 있다.

우분투의 경우 a2enmod 명령을 통해 모듈에 대한 enable / disable을 수행할 수 있다.

(/etc/apache2/sites-available/default 설정파일 및 a2enmod 명령어 참고할것)

윈도우는 module 이라는 폴더내에 기본 모듈이 존재하며 만약 존재하지 않는 경우 다운로드 받아 해당 폴더에 복사하고 httpd.conf 파일내에 Loadmodule 옵션을 추가하면 된다.


module 종류 및 설명

httpd -M 옵션을 통한 명령 수행시 현재 설정된 모듈이 출력된다.


mod_cache

URI를 키로 하여 내용을 캐쉬를 수행한다.

<httpd.conf 설정 예제>

CacheRoot /home/cache    ### 캐쉬되는 디렉토리 지정

CacheEnable disk /    ### "/" 와 같은 URL-STRING 이하의 URL들을 캐쉬한다. 저장관리자는 disk/mem/fd가 존재한다.

CacheDirLevels 1

CacheDirLength 2

CacheMaxFileSize 20000000    ### 기본으로 1M가 최대임으로 더많은 용량을 캐쉬하기 위해서 변경필요

CacheMinFileSize 1000    ### 

★그외지시자

CacheIgnoreCacheControl On    ### On/Off 할수 있으며 HTTP Cache-Control 헤더를 무시하고 캐쉬한다.

CacheIgnoreHeaders    ### 특정 헤더에 대한 캐쉬기능을 사용하지 않을 경우 사용한다.

CacheIgnoreNoLastMod On    ### On/Off 할수 있으며 last-modified 헤더정보를 무시하고 캐쉬한다.



mod_disk_cache

mod_mem_cache


★참고사이트

http://helicontech.blogspot.com/2009/01/how-modcache-works.html

다음과 같은 조건에서 캐쉬한다.

- Request Method 가 GET일 경우

- 응답 상태가 200(200, 203,300,301 또는 410)

- 요청에 Authorization 헤더가 포함된 경우 응답을 캐쉬하지 않는다.

- 응답에 Authorization 헤더가 포함된 경우, cache-control 헤더에 s-maxage,must-revalidate 또는 public 가 포함되어 있어야 한다.

- Expires 응답 해더에 미래 날짜가 포함된 경우

- 응답에 expiration time을 포함한 경우

- cache-control 헤더에 private 가 포함된 경우 cache 되지 않는다.(cachestoreprivate 를 통해 무시할수 있다.)

- cache-control 헤더에 Etag, Last-Modified 혹은 Expires 가 미포함된 경우 cache되지 않는다.(cacheignorenolastmodified 를 통해 무시할수 있다.)

- 동적 컨텐츠의 경우 캐쉬되지 않는다.


캐쉬가 정상적으로 동작하는지 확인하기 위해 wget을 통한 캐쉬 여부를 확인해 보기로 했다.

실제로 proxy가 동시에 동작하는 환경이기 때문에 클라이언트에서 다음과 같은 테스트 명령을 수행해서 확인하였다.

- wget -e http_proxy=http://192.168.1.1:9000 http://172.29.150.150/test.txt


mod_proxy

아파치 웹서버를 Proxy 서버로 사용할수 있다.

<httpd.conf 설정 예제>

LoadModule proxy_module modules/mod_proxy.so

# LoadModule proxy_connect_modue modules/mod_proxy_connect.so


ProxyRequests On


<Proxy *>

Order deny, allow    ### 명령 순위 deny -> allow (즉, 차단 먼저)

Deny from all    ### 프록시 서버 접근 제한(모든 접근 차단)

Allow from internal.example.com    ###  internal.example.com 만 허용

</Proxy>

★ 포워드 프록시

client -> proxy(내부) -> Target Server

위 구성에서도 볼수 있듯이 일반적인 프록시 구성으로 내부에 프록시 서버를 통해 Target Server에 접속하는 방법이다. 실제 Target Server를 알수 있으며 proxy에 대한 정보로 설정 및 인지를 해야한다.


★ 리버스 프록시

client -> proxy(외부) -> Target Server

위 구성에서도 볼수 있듯이 포워드 프록시와의 차이점은 proxy 서버가 외부에 있는지 내부에 있는지이다. 위와 같은 상황에서는 우리는 Target Server의 실제 주소는 알수 없다. 쉽게 이해하기 위해서는 말 그대로 포워드 프록시와 반대로 흐림이 발생한다고 생각하면 된다.

좀더 쉽게 이야기하자면 리버스가 의미하는 바는 "반대"가 아닌 "뒷편"이라고 할수 있고 실서버를 감추어 보안성을 높일수 있기 때문이다.

이것을 활용하면 proxy를 또 다른 proxy 서버로 포워딩하는 것이 가능하다. 또한 부하분산 및 리버스 프록시의 중재로 인한 보안향상의 효과를 볼수 있다.


ProxyPass /proxy http://XXXX/    ### 

ProxyPassReverse /proxy http://XXXX/    ###


★ 그외지시자

ProxyRemote * http://192.168.1.1/    ### 

ProxyRemoteMatch  [regtex] [remote server]  ### 정규표현식을 사용할수 있으며 proxyremote와 동일한 기능을 사용할 수 있다.(ex. proxyremotematch test.com http://192.168.1.1:8080)

ProxyVia On    ### [On/Off/Full/Block] 프록시를 경유하는 HTTP 헤더정보를 제어할수 있는 기능

ProxyTimeout 

ProxyPass

NoProxy

 프록시 구성시 참고 사이트

http://www.mnot.net/cache_docs/



Proxy 요청은 다음과 같은 명령이 수행된다고 생각할 수 있다.

- GET http://origin_dst_domain/index.html HTTP/1.0

- 즉, proxyserver에 접속하여 origin_dst_domain으로 데이터를 요청하게 되는것이다.



※ Proxy 와 Cache




mod_rewrite

해당 모듈은 클라이언트의 URL 요청에 대한 redirection 수행을 한다.

<httpd.conf 설정 예제>

RewriteEngine On  ## 해당 모듈의 엔진을 사용할지 여부를 설정(Off시에 해당 모듈 기능을 사용하지 않는다.)

RewriteLog [File-Path] ##

RewriteLogLevel

RewriteCond [String] [Pattern]  ## RewriteCond 규칙과 부합하는지 검사하고 부합할 경우만 RewriteRule 조건매칭을 수행한다.

RewriteRule [Pattern] [C/L/R]

※ 정규표현식에 대하여 기본 지식이 필요하다.

- RewriteRule

정규식을 사용하여 redirection 수행을 위한 규칙을 생성할 수 있다.


mod_expires

<httpd.conf 설정 예제>





mod_ssl

<ssl.conf 설정 예제>



mod_jk

Tomcat과 apache 연동을 위한 모듈

<httpd.conf 설정 예제>



mod_throttle

트래픽 관리 모듈로 비슷한 모듈은 mod_cband / mod_bandwidth가 있다.

mod_throttle은 apache 1.3.X 대만 지원하고 있고 현재는 2.X 대는 지원하지 못하고 있다.

아파치재단에서 공식적으로 지원하는 모듈은 아니다.



mod_headers

해당 모듈은 HTTP 요청과 응답에 대한 헤더필드를 control 할수 있다.

<httpd.conf 설정 예제>

RequestHeader    ### 요청패킷의 헤더정보를 Control할때 사용한다.

RequestHeader set 

RequestHeader unset 

RequestHeader append 

RequestHeader add


Header    ### 응답패킷의 헤더정보를 Control할때 사용한다.

Header set 

Header unset 

Header append

Header add


예를 들어 Range 헤더필드를 제거하고 싶은 경우 

RequestHeader unset Range 와 같이 설정한후 패킷덤프를 해보면 해당 패킷내의 Range 헤더필드는 존재하지 않는 것처럼 보여진다.



mod_cband

virtual host 별로 트래픽 제한을 수행할 수 있다.

설치과정

tar xvf mod-cband-0.9.7.5

./configure --with-apxs=/usr/bin/apxs2

make 

make install






mod_evasive

DDOS 공격 방어 모듈



mod_bw


설치과정

tar xfz mod_bw-0.92.tgz

apxs -i -v -p mod_


proxy 환경에서는 지원이되지 않는다.(즉, proxy 되어 경유되는 파일은 다운로드시 rate limit가 이루어지지 않는다.)


Apache Extension Program

apxs 는 새모듈을 추가할수 있다.


/usr/local/apache/bin/apxs -c mod_speling.so 

(gcc 호출해서 mod_speling을 컴파일 한다.)



참고사항

- http://httpd.apache.org


※ 영문자료 오역이나 개인의 잘못된 생각이 가미되었을수도 있기에 수정이 필요한 부분이 존재할 수 있습니다. 수정이 필요하거나 삭제 및 추가가 필요한 경우 댓글 남겨주시면 수정토록 하겠습니다.

'Server > WebServer' 카테고리의 다른 글

serve single file on NGINX  (0) 2021.03.23
print local ip address and hostname using php on httpd  (0) 2017.04.17
Apache Traffic Server (ATS)  (0) 2014.04.29
apache httpd module  (0) 2012.04.03
댓글
댓글쓰기 폼