Nginx 配置虛擬機器主機網域名稱 mingzi.111cn.net,當瀏覽者訪問主站時,通過代理去訪問 server1.mingzi.111cn.net 網站。從而達到一種負載平衡的作用。
以下是Nginx負載平衡,反向 Proxy的配置:
代碼如下 |
複製代碼 |
server { server_name mingzi.111cn.net; listen 80; 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_set_header Via "nginx"; proxy_pass http://server1.mingzi.111cn.net:80; } } |
通過proxy_set_header設定 Header資訊,包括Host Name(主機網域名稱),X-Real-IP(真實IP),寄件者。
PHP擷取代理之前的真實資訊
通過列印PHP $_SERVER即可擷取到代理之前的資訊。
1. 擷取Host Name(主機網域名稱)
[HTTP_HOST] => mingzi.111cn.net
如果未經proxy_set_header Host $host; 設定的話,它的值為 server1.mingzi.111cn.net。
2. 擷取訪問者的真實IP地址
代碼如下 |
複製代碼 |
[HTTP_X_REAL_IP] => 58.220.197.34 [HTTP_X_FORWARDED_FOR] => 58.220.197.34 |
如果未經proxy_set_header X-Real-IP 和 X-Forwarded-For 設定的話,它的值為 server1.mingzi.111cn.net 的IP地址,這樣就非常糟糕。
以下是擷取真實使用者的IP地址函數:
代碼如下 |
複製代碼 |
function getClientIp($checkProxy = true) { if ($checkProxy && @$_SERVER['HTTP_CLIENT_IP'] != null) { $ip = @$_SERVER['HTTP_CLIENT_IP']; } else { if ($checkProxy && @$_SERVER['HTTP_X_FORWARDED_FOR'] != null) { $ip = @$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = @$_SERVER['REMOTE_ADDR']; } } return $ip; }
|
3. 擷取寄件者頭資訊
[HTTP_VIA] => nginx
如果未經proxy_set_header Via “nginx”;設定的話,在代理主機上擷取不到這個值。
Nginx做負載平衡時做的反向 Proxy有個缺點不能傳遞Cookie。