2016-05-12 79 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