2009년 06월 18일
Running a Reverse Proxy with Apache
| http://www.apacheweek.com/features/reverseproxies 참조 번역 Web Proxies Proxy server는 크게 웹에 대한 사용자의 gateway이다. 사용자가 브라우저 세팅에서 proxy를 설정하면 모든 HTTP request는 proxy를 통해 route된다. 일반적으로 proxy는 다음과 같은 역할에 사용된다. * caching된 페이지를 얻음으로써, 빠른 웹 access. * firewall 뒤의 사용자에게 특정 웹 접근을 가능하게 control * web content 의 filter 나 transform Apache의 mod_proxy는 Forward Proxy와 Reverse Proxy를 지원하는데, Reverse Proxy는caching을 통한 웹성능 향상외에 웹으로부터 방화벽뒤에있는 서버로의 controlled access를 가능하게 하기 위해대부분 사용된다. - Forward Proxy : 서비스 서버의 앞에 서서 요청을 얻어옴. 방화벽을 뚫기위해 많이 설정함. - Reverse Proxy : 역시 서비스 서버의 앞에 서나 대행을 위해 사용됨. Proxing with Apache Standard Apache module인 mod_proxy는 HTTP/1.0 과 HTTP/1.1 두 protocolversion을 지원하는데, HTTP/1.1이 rich new cache control mechanisims을 가진다는 점에서큰 차이가 있다. The Apache Proxy Modules Apache modular arcitecture를 유지하기 위해서는, mod_proxy는 modular 자체이고, 전형적인proxy server는 가능한 여러 모듈을 필요로 할 것이다. 이장에서는 proxing과 관련한 이런 모듈에 대한 설명을 주로할 것이고, caching 관련해서는 다루지 않는다. mod_proxy: The core module deals with proxy infrastructure and configuration and managing a proxy request. mod_proxy_http: This handles fetching documents with HTTP and HTTPS. mod_proxy_ftp: This handles fetching documents with FTP. mod_proxy_connect: This handles the CONNECT method for secure (SSL) tunneling. mod_cache, mod_disk_cache, mod_mem_cache: These deal with managing adocument cache. To enable caching requires mod_cache and one or both ofdisk_cache and mem_cache. mod_proxy_html: This rewrites HTML links into a proxy's address space. mod_headers: This modifies HTTP request and response headers. mod_deflate: Negotiates compression with clients and backends. Building Apache for Proxing ( Apache 2.0 기준) mod_proxy_html을 제외하고, 위 모든 모듈이 core Apache distribution에 들어가있으므로, 쉽게 사용가능하다. (mod_proxy_html 설치는 위 사이트 참조하십시여 ㅡㅡ;) Apache의 configure에서 # ./configure --prefix=/env/apache2 --enable-proxy=shared # make # make install 간단히 ./configure --enable-proxy --enable-proxy-http 기존 installation에 추가하기 위해서는 apxs를 써야한다. # apxs -c -i [module-name].c noting that mod_proxy itself is in two source files (mod_proxy.c and proxy_util.c). A Reverse Proxy Scenario example.com이라는 회사가 internet을 통해 접근가능한 public IP address와 DNS entry를 가진 www.example.com이라는 website를 가지고 있다고 하자. 이 회사는 또한 방화벽 안에 private IP address와 등록되지 않은 DNS entry를 가진 여러application server를 가지고 있다. 이런 해당 network안의 applicationserver로internal1.example.com"과 "internal2.example.com" 이 있다고 하자. 이 서버들은public DNS entry를 가지지 않으므로, 회사외부로 부터 internal1.example.com으로 접근이 안되고"no such host" 에러가 날 것이다. 그런데, 이 application server로 web access를 해야된다고 결론이 난 것이다. 당연히 internet을 통해 직접적으로 노출하지는 말아야되고 해당 웹서버로 통합되긴 해야하므로, 내부적으로 http://www.example.com/app1/any-path-here 를 http://internal1.example.com/any-path-here로 매핑하고 http;//www.example.com/app2/other-path-here를 http://internal2.example.com/other-path-here로 매핑하는 것이다. Configuring the Proxy 이 모듈을 사용하기 위해서 우선 httpd.conf에 이것들을 loading 하라고 위 사이트에는 적혀있으나,실제로 mod_proxy는 아파치와 static으로 link되기 때문에 LoadModule을 하지 않아도 되므로 여기선생략하겠다. proxy를 구성하기 전에, 우선 아래 중요한 securiy warning을 확인하자. "ProxyRequests On" 으로 setting하지 말아라. ProxyRequests 를 On으로 setting하면, 당신의 서버가 Open Proxy로 변해버린다. web을 open proxy로 scan해버리는 인간들이 있어서, 이 서버를 불법적인 곳에 access하기위해 route하려고사용하거나 심하게는 이 proxy를 통해 email spam을 route할 수도 있다. 얼마안가서 정상적인 traffic은막혀버리고 family filter 같은 것에 의해 block당해버린 서버들을 발견하게 될 것이다. 물론 적절한 security measure로 forward proxy를 사용할 수 있으나, 여기선 다루지 않겠다. reverse proxy를 설치하는 기본적인 configuration directive는 ProxyPass 이다. 해당 application server의 proxy rules를 set up하기 위해 아래와 같이 사용하면 된다. ProxyPass /app1/ http://internal1.example.com/ ProxyPass /app2/ http://internal2.example.com/ 그리고 apache를 재시작하면 http://www.example.com/app1/some-path-maps 가 http://internal1.example.com/some-path 로 매핑되게 된다. |
# by | 2009/06/18 11:12 | Web | 트랙백 | 덧글(0)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]