client ip 를 nginx 에서 apache 로 전달하기

# 다음과 같이 apache httpd 이전에 nginx 에거 사용자 요청을 받는 경우,
# apache httpd 에서의 remote ip 는 nginx ip 가 된다.
client(10.10.10.10) --> nginx (20.20.20.20) --> apache httpd (30.30.30.30)

# apache httpd  에서 client ip 를 파악하기 위해선 nginx.conf 에서 다음과 같이
# 프록시(apache httpd)에 전달시 헤더에 X-Real-IP 나 X-Forwarded-For 값을 설정한다.
# $proxy_add_x_forwarded_for 는 $remote_addr 가 포함된 클라인트 요청 헤더다.
vi nginx.conf
server{
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://30.30.30.30:PORT;
    }
}

# apache httpd 2.2 에선 mod_rpaf 를 설치하고
# rpaf 모듈을 사용하여 nginx 가 보낸 헤더를 사용할 수 있도록 다음과 같이 설정한다.
vi httpd.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
<IfModule mod_rpaf.c>
    RPAFenable On
    RPAFsethostname On
    PAFheader X-Forwarded-For
    RPAFproxy_ips 20.20.20.20
</IfModule>

# apache httpd 2.4 부터는 RemoteIPHeader 를 제공하여 있어 다음과 같이 설정에 추가한다.
vi httpd.conf
LoadModule remoteip_module modules/mod_remoteip.so
<IfModule remoteip_module>
    RemoteIPHeader X-Forwarded-For
    RemoteIPTrustedProxy 123.123.123.123
    RemoteIPTrustedProxy 10.0.0.0/8
</IfModule>

참고
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
https://chrismorris.org/passing-ip-from-nginx-to-apache/
https://github.com/y-ken/mod_rpaf
https://httpd.apache.org/docs/current/mod/mod_remoteip.html

comments:

댓글 쓰기