2015年1月21日 星期三

nginx 設定反向代理伺服器

反向代理:真實的伺服器在反向代理伺服器後面,使用者訪問反向代理伺服器,反向代理伺服器再將 request 轉給真實伺服器處理。所以使用者不知道真實伺服器在哪邊(可能在內網,也可能在其他國家),可隱藏真正伺服器的位置。

nginx 設定反向代理伺服器範例
server {
    listen 80;
    server_name aa.example.com
    location / {
        # 設定真實伺服器 
        proxy_pass http://192.168.0.10:80;

        # 將Host設定為使用者訪問時使用的網域(aa.example.com),
        # 避免真實伺服器用網域作虛擬主機(Name-based Virtual Host)時無法作用
        proxy_set_header Host $host;

        # 自訂一個header變數,名稱可隨意設定,帶上使用者的 IP 
        proxy_set_header X-Real-IP $remote_addr;

        # 加上中間經過的代理IP,逗號區隔(client, proxy1, proxy2...)
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


經過反向代理伺服器的時候,真正提供服務的 server 用 REMOTE_ADDR 取得的 IP 將會是代理伺服器的 IP,要知道使用者真正的 IP,可在代理伺服器上加上自訂的 Header 參數,代入 clinet 端的 IP。

上面的範例,在 PHP 中,則可以用 $_SERVER['HTTP_X_REAL_IP']、$_SERVER['HTTP_X_FORWARDED_FOR'] 取得相關的 IP 資訊。


其他:
nginx.conf 相關設定
    proxy_buffering on;
    proxy_buffer_size 32k;
    proxy_buffers 64 32k;


參考:
反向代理
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

沒有留言:

張貼留言