查看完整版本: nginx 反向代理reverse proxy 如何取得真實 IP及網址


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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header Host $host;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header X-Real-IP $remote_addr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header REMOTE-HOST $remote_addr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>[/quote]<br>&nbsp;<br>其中第一行關於host的配置,是關於域名傳遞的配置,餘下跟IP相關。<br><br><font color="Blue" size="3">php中取得客戶端真實IP:</font><br>[quote]<br>&nbsp;&nbsp;&nbsp; /** <br>&nbsp;&nbsp;&nbsp;&nbsp; * 獲取客户端ip <br>&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; function getClientIP() {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = "unknown";&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span id="result_box" class="short_text" lang="zh-TW"><span title="访问时用localhost访问的,读出来的是“::1”是正常情况。">訪問時用localhost訪問的,讀出來的是“::1”是正常情況。</span></span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span id="result_box" class="short_text" lang="zh-TW"><span title="::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。">::1說明開啟了ipv6支持,這是ipv6下的本地回環地址的表示。</span></span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <span id="result_box" class="short_text" lang="zh-TW"><span title="使用ip地址访问或者关闭ipv6支持都可以不显示这个。">使用ip地址訪問或者關閉ipv6支持都可以不顯示這個。</span></span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * */&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isset($_SERVER)) {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = $_SERVER["HTTP_CLIENT_ip"];&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = $_SERVER["REMOTE_ADDR"];&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (getenv('HTTP_X_FORWARDED_FOR')) {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = getenv('HTTP_X_FORWARDED_FOR');&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } elseif (getenv('HTTP_CLIENT_ip')) {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = getenv('HTTP_CLIENT_ip');&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip = getenv('REMOTE_ADDR');&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(trim($ip)=="::1"){&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ip="127.0.0.1";&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $ip;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>[/quote]<br><br>php取得網址:<br>[quote]<br>&nbsp;&nbsp;&nbsp; $_SERVER['SERVER_NAME'];&nbsp; <br>[/quote]<br><br><br>
頁: [1]
查看完整版本: nginx 反向代理reverse proxy 如何取得真實 IP及網址