티스토리 뷰
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
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' 카테고리의 다른 글
response custom error page from proxy server (0) | 2022.03.03 |
---|---|
How to use nginx lua module (0) | 2022.02.21 |
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 |
- Total
- Today
- Yesterday
- Jenkinsfile
- hashicorp boundary
- K3S
- aquasecurity
- kubernetes
- minio
- macvlan
- kubernetes install
- ceph
- socket
- azure policy
- crashloopbackoff
- GateKeeper
- ansible
- DevSecOps
- Helm Chart
- metallb
- mattermost
- kata container
- vmware openstack
- openstacksdk
- minikube
- Terraform
- boundary ssh
- wsl2
- openstack backup
- open policy agent
- jenkins
- nginx-ingress
- OpenStack
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |