成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Nginx前端設(shè)置反向代理,后端Apache如何獲取訪客的真實(shí)IP,結(jié)合PHP。

Richard_Gao / 2572人閱讀

摘要:總結(jié)在作為反向代理的架構(gòu)中,的其他語言也是類似的名稱拿到的將會(huì)是代理的地址。本意就是遠(yuǎn)程的地址,是代理層,轉(zhuǎn)發(fā)請求到,獲取到的遠(yuǎn)程地址實(shí)際上是反向代理服務(wù)器,這是符合協(xié)議規(guī)則的。

nginx反向代理后,在應(yīng)用中取得的ip都是反向代理服務(wù)器的ip,取得的域名也是反向代理配置的url的域名,解決該問題,需要在nginx反向代理配置中添加一些配置信息,目的將客戶端的真實(shí)ip和域名傳遞到應(yīng)用程序中。

①:php獲取REMOTE_ADDR就是這樣一個(gè)情況(內(nèi)網(wǎng)地址)。
②:獲取的是攻擊者偽造的ip地址。攻擊者可以隨便偽造一個(gè)頭部信息,隨便填寫一個(gè)ip放到頭部發(fā)過來,php獲取到HTTP_CLIENT_IP就是這樣一個(gè)情況。偽造的ip,導(dǎo)致我們數(shù)據(jù)庫存儲是假的ip,無從真實(shí)去判斷攻擊者的來源。比如批量注冊帳號的注冊ip,登錄的ip等。
配置如下:

location ~* .(jpg|png|gif)$ {
     proxy_set_header  X-Forwarded-For $remote_addr;  
     #proxy_pass http://....
}
location ~ .php$ {
     proxy_set_header  X-Forwarded-For $remote_addr;
     #proxy_pass http://....
}

PHP代碼:

function getIP() {
          $ip = "unknown";   
        if (getenv("HTTP_X_FORWARDED_FOR")) {
            //這個(gè)提到最前面,作為優(yōu)先級,nginx代理會(huì)獲取到用戶真實(shí)ip,發(fā)在這個(gè)環(huán)境變量上,必須要nginx配置這個(gè)環(huán)境變量HTTP_X_FORWARDED_FOR
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("REMOTE_ADDR")) {
           //在nginx作為反向代理的架構(gòu)中,使用REMOTE_ADDR拿到的將會(huì)是反向代理的的ip,即拿到是nginx服務(wù)器的ip地址。往往表現(xiàn)是一個(gè)內(nèi)網(wǎng)ip。
            $ip = getenv("REMOTE_ADDR");
        } else if ($_SERVER["REMOTE_ADDR"]) {
            $ip = $_SERVER["REMOTE_ADDR"];
        } else if (getenv("HTTP_CLIENT_IP")) {
            //HTTP_CLIENT_IP攻擊者可以偽造一個(gè)這樣的頭部信息,導(dǎo)致獲取的是攻擊者隨意設(shè)置的ip地址。
            $ip = getenv("HTTP_CLIENT_IP");
        }
        return $ip;
 }

總結(jié)

在nginx作為反向代理的架構(gòu)中,php的REMOTE_ADDR(其他語言也是類似的名稱)拿到的將會(huì)是nginx代理的ip地址。拿不到用戶的真實(shí)ip,拿到是nginx反向代理服務(wù)器地址。
REMOTE_ADDR本意就是遠(yuǎn)程的地址,nginx是代理層,轉(zhuǎn)發(fā)請求到php,php獲取到的遠(yuǎn)程地址實(shí)際上是nginx反向代理服務(wù)器ip,這是符合協(xié)議規(guī)則的。
但是,可以讓nginx幫助我們拿到用戶的真實(shí)ip,寫到一個(gè)環(huán)境變量中,然后轉(zhuǎn)發(fā)給我們,只要按照某個(gè)約定的名稱即可,比如約定名稱為HTTP_X_FORWARD_FOR(也可以約定其他名稱,關(guān)鍵看nginx中配置,可以全公司考慮統(tǒng)一)。
nginx配置類似于這樣:

fastcgi_param  HTTP_X_FORWARD_FOR  $remote_addr;

上一句的目的是,將HTTP_X_FORWARD_FOR的值設(shè)置為$remote_addr的值。也就是將用戶真實(shí)的ip(或用戶使用代理的ip)放到HTTP_X_FORWARD_FOR中去。
$remote_addr是nginx的內(nèi)置變量,這個(gè)變量它得到是用戶真實(shí)的ip地址(用戶使用了代理,則就是代理的ip地址)。
于是在php端通過getenv("HTTP_X_FORWARDED_FOR")就可以獲取到nginx傳遞過來的值,是用戶真實(shí)的ip地址。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28171.html

相關(guān)文章

  • Nginx前端設(shè)置反向代理后端Apache如何獲取訪客真實(shí)IP,結(jié)合PHP。

    摘要:總結(jié)在作為反向代理的架構(gòu)中,的其他語言也是類似的名稱拿到的將會(huì)是代理的地址。本意就是遠(yuǎn)程的地址,是代理層,轉(zhuǎn)發(fā)請求到,獲取到的遠(yuǎn)程地址實(shí)際上是反向代理服務(wù)器,這是符合協(xié)議規(guī)則的。 nginx反向代理后,在應(yīng)用中取得的ip都是反向代理服務(wù)器的ip,取得的域名也是反向代理配置的url的域名,解決該問題,需要在nginx反向代理配置中添加一些配置信息,目的將客戶端的真實(shí)ip和域名傳遞到應(yīng)用程...

    OpenDigg 評論0 收藏0
  • 前端nginx使用札記

    摘要:它是一個(gè)高性能的和反向代理服務(wù)器,同時(shí)也可以作為的代理服務(wù)器。如果相對域名或參數(shù)字符串起作用,可以使用全局變量匹配,也可以使用反向代理。 nginx是什么? nginx是俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點(diǎn)開發(fā)的一個(gè)十分輕量級的HTTP服務(wù)器。它是一個(gè)高性能的HTTP和反向代理服務(wù)器,同時(shí)也可以作為IMAP/POP3/SMTP的代理服務(wù)器。ngi...

    tianren124 評論0 收藏0
  • Nginx配置文件學(xué)習(xí)筆記

    摘要:配置文件學(xué)習(xí)筆記定義運(yùn)行的用戶和用戶組進(jìn)程數(shù),建議設(shè)置為等于總核心數(shù)全局錯(cuò)誤日志定義類型,進(jìn)程文件指定進(jìn)程可以打開的最大描述符數(shù)目工作模式與連接數(shù)上限這個(gè)指令是指當(dāng)一個(gè)進(jìn)程打開的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開文件數(shù)與進(jìn)程數(shù)相除, Nginx配置文件學(xué)習(xí)筆記 定義Nginx運(yùn)行的用戶和用戶組 user nginx; Nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù) worker...

    muddyway 評論0 收藏0
  • Nginx配置文件學(xué)習(xí)筆記

    摘要:配置文件學(xué)習(xí)筆記定義運(yùn)行的用戶和用戶組進(jìn)程數(shù),建議設(shè)置為等于總核心數(shù)全局錯(cuò)誤日志定義類型,進(jìn)程文件指定進(jìn)程可以打開的最大描述符數(shù)目工作模式與連接數(shù)上限這個(gè)指令是指當(dāng)一個(gè)進(jìn)程打開的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開文件數(shù)與進(jìn)程數(shù)相除, Nginx配置文件學(xué)習(xí)筆記 定義Nginx運(yùn)行的用戶和用戶組 user nginx; Nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù) worker...

    MoAir 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<