2016-05-12 78 views
0

我必須上傳一個使用Laravel的網站。 我必須使用的服務器使用的是反向代理服務器,當我將我在計算機上開發的文件放入時,出現DNS錯誤。爲反向代理配置Laravel

我沒有權限訪問服務器配置,我只能上傳/下載網站服務器分區上的文件。

我搜索了一個解決方案,但我能找到的任何東西都與this question有關。

+0

我沒有使用Laravel,但是我有一個純PHP的簡單例子,如果它對你有些興趣 – Bobot

+0

這將會很棒,也許它會告訴我如何在代理的黑暗水域中進行操作。 –

回答

0

所以,這不是Laravel版本,但這可以幫助你,我希望!

下面是一些代碼,我在CakePHP的2.X寫了,因爲我有一個反向代理的一些問題也

Cache類是CakePHP的之一,它是非常簡單的(60秒到期,自動序列化數據)。

LogError功能是一個簡單的日誌功能

代碼如下

// Constants 
define('REVERSE_PROXY_ADDR' , 'r-proxy.internal-domain.com'); 
define('REVERSE_PROXY_CACHE', 'r-proxy'); 

// Cache Config 
Cache::config(REVERSE_PROXY_CACHE, array(
    'engine' => 'File', 
    'prefix' => REVERSE_PROXY_CACHE . '_', 
    'path'  => CACHE . REVERSE_PROXY_CACHE . '/', 
    'serialize' => true, 
    'duration' => 60, 
)); 


function clientIp() 
{ 
    // Originaly from CakePHP 2.X 
    // ------------------------------ 

    if (isset($_SERVER['HTTP_CLIENT_IP'])) 
    { 
     $ipaddr = $_SERVER['HTTP_CLIENT_IP']; 
    } 
    else 
    { 
     $ipaddr = $_SERVER['REMOTE_ADDR']; 
    } 

    if (isset($_SERVER['HTTP_CLIENTADDRESS'])) 
    { 
     $tmpipaddr = $_SERVER['HTTP_CLIENTADDRESS']; 

     if (!empty($tmpipaddr)) 
     { 
      $ipaddr = preg_replace('/(?:,.*)/', '', $tmpipaddr); 
     } 
    } 

    $ip = trim($ipaddr); 

    // ------------------------------ 

    // Reverse proxy stuff 

    if (defined('REVERSE_PROXY_ADDR') && defined('REVERSE_PROXY_CACHE')) 
    { 
     $xfor = preg_replace('/(?:,.*)/', '', $_SERVER['HTTP_X_FORWARDED_FOR']); 

     $list = Cache::read('iplist', REVERSE_PROXY_CACHE); 

     if ($list === false) 
     { 
      $list = gethostbynamel(REVERSE_PROXY_ADDR); 

      Cache::write('iplist', $list, REVERSE_PROXY_CACHE); 
     } 

     // empty or unreadable 
     if (empty($list)) 
     { 
      logError('Unable to gather reverse proxy ip list, or empty list'); 
      logError('Type : ' . gettype($list)); 
      logError('IP : ' . $ip . ' - X-FORWARDED-FOR : ' . $xfor); 

      return $ip; 
     } 
     // not array ?!?! 
     if (!is_array($list)) 
     { 
      logError('Given list was not an array'); 
      logError('Type : ' . gettype($list)); 
      logError($list); 

      return $ip; 
     } 

     // if in array, give forwarded for header 
     if (in_array($ip, $list, true)) 
     { 
      return $xfor; 
     } 
    } 

    return $ip; 
} 

然後你只需要調用clientIp();功能。

如果您有一個用於反向代理的靜態IP地址,您可以在代碼中手動設置它,但這不是一個好習慣。但是你不需要使用緩存,它會簡化很多代碼。

如果您使用的是動態的反向代理,你必須查詢它在它的主機名這樣的(我在發佈代碼所做的那樣):

gethostbynamel('reverse-proxy-addr'),獲取可能的rproxy IP地址

列表OR

gethostbyname('reverse-proxy-addr')獲得一個IP爲rproxy

在其他情況下,你只需要檢查REMOTE_ADDR是標記爲重新IP列表經文代理IP

希望它有幫助!

+0

你能告訴我你把這段代碼放在哪個文件中嗎? –

+0

定義和緩存配置文件中的配置,HttpRequest類中的函數或類似的東西 – Bobot