가장 앞단에 proxy 서버가 있고, 이 proxy 서버의 80포트에 데몬(해석 프로그램)이 구동되고 있고,
이 데몬은 http host 를 해석에서 알맞은 내부서버로 포워딩하는 역할을 한다.
외부에서 보기에는 하나의 서버가 다 처리하는 것처럼 보이는데, 실제로는 내부의 전용 서버가 요청을 받아서 처리하는 것이다.
이때 내부서버의 apache 에서는 REMOTE_ADDR 에는 proxy server 의 아이피가 찍히고, X_FORWARDED_FOR 에 실제 요청을 하는 고객 아이피가 찍힌다.
이것은 많은 웹프로그램에게 혼란을 준다. 예를 들어 스팸글이 등록되었는데 proxy server 의 아이피로 기록이 되고, 관리자가 proxy server를 차단하면 서버가 모두 먹통이 되는 현상이 발생한다.
내부 서버에서 proxy 서버 정보를 설정해서 고객의 아이피가 REMOTE_ADDR에 기록되게 하자.
자세한 이론.
전문용어를 풀어쓰지 않고 그냥 쓰겠다.
패킷을 전달하는 routing 방식에는 pre-routing과 post-routing이 있다.
우리가 사용하는 인터넷은 OSI 7 네트워크 구성중 TCP/IP 모델을 사용하고 있다.
- 5계층 : 응용계층 (Application Layer)
- 4계층 : 전송계층 (Transport Layer)
- 3계층 : 네트워크계층 (Network Layer)
- 2계층 : 데이터링크계층 (Datalink Layer)
- 1계층 : 물리계층 (Physical Layer)
보통 응용계층을 생략하고 4계층이라고 말하거나, 또는 5계층이라고 말한다.
계층마다 정해진 역할이 있는데, 3계층에서는 패킷의 ip를 해석할 수 있고, 4계층에서는 패킷을 해석할 수 있다.
- 3계층에서 할 수 있는 라우팅은 ip 기반 라우팅 : 120번 아이피의 요청이면 -> k 서버에게
pre-routing, 일반적인 라우팅방식, 패킷의 ttl 줄어들고 라우팅
- 4계층에서 할 수 있는 라우팅은 문맥 기반 라우팅 : abc.com 요청이면 -> p 서버에게
post-routing, 프록시서버에서 재 전송해는 방식, 패킷의 source address 가 바뀐다.
1) Advanced Packaging Tool 패키지 목록 갱신
#apt-get update
2) Advanced Packaging Tool 갱신된 패키지 목록에서 rpaf 있는지 찾기
#apt-cache search rpaf
libapache2-mod-rpaf - module for Apache2 which takes the last IP from the 'X-Forwarded-For' header
3) rpaf 설치
#apt-get install libapache2-mod-rpaf
4) rpaf 모듈 켜기
#a2enmod rpaf
5) Proxy 아이피 등록
#vi /etc/apache2/mods-available/rpaf.conf
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 #set your proxy ip here
</IfModule>
6) Apache 재시작
#service apache2 restart
7) 테스트
다음의 php문서를 작성하고 실행시켜보자.
<?php echo $_SERVER['REMOTE_ADDR']; ?>
Conversation
In the margins
0 notes
No comments yet. Be the first to leave a note.