linux 2014-8-19 16:34
nginx 反向代理reverse proxy 如何取得真實 IP及網址
nginx反向代理後,在應用中取得的ip都是反向代理服務器的ip,取得的域名也是反向代理配置的url的域名,解決該問題,需要在nginx反向代理配置中添加一些配置信息,目的將客戶端的真實ip和域名傳遞到應用程序中。<br><br><font color="Blue" size="3">nginx反向代理配置時,一般會添加下面的配置:</font><br>[quote]<br> proxy_set_header Host $host;<br> proxy_set_header X-Real-IP $remote_addr;<br> proxy_set_header REMOTE-HOST $remote_addr;<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>[/quote]<br> <br>其中第一行關於host的配置,是關於域名傳遞的配置,餘下跟IP相關。<br><br><font color="Blue" size="3">php中取得客戶端真實IP:</font><br>[quote]<br> /** <br> * 獲取客户端ip <br> */ <br> function getClientIP() { <br> $ip = "unknown"; <br> /* <br> * <span id="result_box" class="short_text" lang="zh-TW"><span title="访问时用localhost访问的,读出来的是“::1”是正常情况。">訪問時用localhost訪問的,讀出來的是“::1”是正常情況。</span></span> <br> * <span id="result_box" class="short_text" lang="zh-TW"><span title="::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。">::1說明開啟了ipv6支持,這是ipv6下的本地回環地址的表示。</span></span> <br> * <span id="result_box" class="short_text" lang="zh-TW"><span title="使用ip地址访问或者关闭ipv6支持都可以不显示这个。">使用ip地址訪問或者關閉ipv6支持都可以不顯示這個。</span></span><br> * */ <br> if (isset($_SERVER)) { <br> if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { <br> $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; <br> } elseif (isset($_SERVER["HTTP_CLIENT_ip"])) { <br> $ip = $_SERVER["HTTP_CLIENT_ip"]; <br> } else { <br> $ip = $_SERVER["REMOTE_ADDR"]; <br> } <br> } else { <br> if (getenv('HTTP_X_FORWARDED_FOR')) { <br> $ip = getenv('HTTP_X_FORWARDED_FOR'); <br> } elseif (getenv('HTTP_CLIENT_ip')) { <br> $ip = getenv('HTTP_CLIENT_ip'); <br> } else { <br> $ip = getenv('REMOTE_ADDR'); <br> } <br> } <br> if(trim($ip)=="::1"){ <br> $ip="127.0.0.1"; <br> } <br> return $ip; <br> } <br>[/quote]<br><br>php取得網址:<br>[quote]<br> $_SERVER['SERVER_NAME']; <br>[/quote]<br><br><br>