Sunday, October 31, 2010

如何取得經過 Apache 2 Proxy 處理過的 real IP

IP 不夠用已經是一個當前公司要面對的問題,但其實是可以透過 domain name + proxy 的方式,讓server 將 http request 送給相對應的 server 做處理。這個方式統稱叫 Proxy,其中最有名又免費的就是 Apache Proxy

若要安裝此 Apache Proxy , 可以用下列指令先安裝
sudo apt-get install apache2
sudo a2enmod proxy
sudo a2enmod proxy_http

然後再指定 module 的內容如下
ProxyPass         /hudson  http://localhost:8081/hudson
ProxyPassReverse /hudson http://localhost:8081/hudson
ProxyRequests Off

# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)

Order deny,allow
Allow from all

但此時內部 server 透過 api 拿到的 ip 都會是此 proxy server 的 IP 。若要拿到 real IP 則需要透過 http header 拿,這些 header 如下

X-Forwarded-For
The IP address of the client.

X-Forwarded-Host
The original host requested by the client in the Host HTTP request header.

X-Forwarded-Server
The hostname of the proxy server.

不過這個要 server 端的 code 必須偵測並加上這些 API 才能取得

No comments: