搜尋

首頁  >  問答  >  主體

反向代理 - nginx前端反代,後端apache如何取得訪客的真實IP?

Nginx反代已經寫好,檢查參數傳遞也沒問題:

server
      {
              listen  80;
              server_name  www.mjj.com;
              location / {
                       proxy_pass  http://www.youjj.com;
                       proxy_redirect off;
                       proxy_set_header   Host             $host;
                       proxy_set_header   X-Real-IP        $remote_addr;
                       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
              }
              access_log  off;
      }

現在的問題是,我後端的php程式取得IP依靠變數$_SERVER['REMOTE_ADDR'],所以取得的是反代伺服器的IP。
後端是apache是​​虛擬主機,所以改動後端可能性不大。
後端的php程式是加密的,也無法改變。
現在請問:有沒有辦法不改動程式把X-REAL-IP或HTTP_X_FORWARDED_FOR賦值到REMOTE_ADDR?譬如改動php.ini能不能實現?
謝謝,此問題被人發在hostloc via:http://www.hostloc.com/thread-138304-...
本人遇到相同的問題,請教一下,謝謝

阿神阿神2750 天前576

全部回覆(5)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:06:55

    這篇文章中說了在nginx+apache類前後端搭建網站時獲取訪客真實ip的方法(這個獲取IP的方法考慮得比較周全),不過也是要你修改PHP程序的:http://www. ithr.org.cn/blogs/blog1.ph...

    哈哈,找到方法了,看這篇文章“mod_rpaf , 令 Nginx 後端的 Apache 獲取到互聯網 IP”:http://www.ithr.org.cn/blogs/blog1.ph...

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-16 17:06:55

    這個要求有點苛刻 ,如果ap能改,就用mod_rpaf;

    不能,簡單一點吧,直接套一個 index.php 然後賦值 $_SERVER['REMOTE_ADDR'] , 再呼叫真實的php程式碼 ;

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 17:06:55

    在apache那邊設定 rewrite,所有的php請求都rewrite到某個 php ,該PHP做的事情就是

    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
    require(ORIGINAL_REQUESTED_PHP.php);

    或試試 HAProxy 這種在更底層進行轉送的軟體,不涉及到HTTP協議,就不用考慮這些HEADER的問題了。

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 17:06:55

    直接設定 proxy_set_header REMOTE_ADDR $remote_addr; 不行麼?

    回覆
    0
  • 怪我咯

    怪我咯2017-05-16 17:06:55

    $_SERVER['REMOTE_ADDR'] 是不能改動的 從哪裡來的請求 這個位址就是哪裡
    像前面幾位所說的方法 在你的加密的程式碼上面加一層殼子 賦個值是不錯的方法

    回覆
    0
  • 取消回覆