Ubuntu에서 X_FORWARDED_FOR 와 REMOTE_ADDR 일치시키기
가장 앞단에 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’]; ?>
안녕하세요.몇일동안 삽질 하다 이렇게 질문남깁니다.
nginx(https)+varnish+nginx(wordpress) 많은 문제가 발생합니다.
1.대시보드 접근이 차단됩니다. 에러 메시지:죄송합니다.이 페이지에 액세스 할 수 없습니다.
2.댓글을 달면 시간 초과됩니다.에러 메시지:504 Gateway Time-out nginx/1.13.8
위문제 빼고 다른 문제없이 https잘 됩니다.
https nginx 서버 하나로도 위같은 문제없이 잘 됩니다.
제 생각에는 작가님의 이글과 관련있는것 같기도 하네요.
혹시 무슨 문제인제 아시나요?
이 글과는 관련이 없는것 같습니다.
https://blog.lael.be/post/2363 글 하단부분의 워드프레스 설정 링크를 참조해보세요.
varnish 서버를 빼고 접속해도 같은 문제가 발생합니다.
로그인은 되는데 대시보드 접근이 안됩니다.
NGINX(HTTPS)와 NGINX(HTTP) 를 한서버에 설치하면 저런문제는 없어집니다.
일단 varnish설정 문제은 아닌거 같아요.
대시보드만 접근이 안되는건 서버문제가 아니라 소프트웨어 문제 같습니다.
wp-config.php 에서 WP_DEBUG 를 true 로 설정하고 로그를 살펴보세요. 플러그인 문제일 수 있습니다.
디버깅 방법은 https://codex.wordpress.org/WP_DEBUG 을 참조해보세요.