我必須上傳一個使用Laravel的網站。 我必須使用的服務器使用的是反向代理服務器,當我將我在計算機上開發的文件放入時,出現DNS錯誤。爲反向代理配置Laravel
我沒有權限訪問服務器配置,我只能上傳/下載網站服務器分區上的文件。
我搜索了一個解決方案,但我能找到的任何東西都與this question有關。
我必須上傳一個使用Laravel的網站。 我必須使用的服務器使用的是反向代理服務器,當我將我在計算機上開發的文件放入時,出現DNS錯誤。爲反向代理配置Laravel
我沒有權限訪問服務器配置,我只能上傳/下載網站服務器分區上的文件。
我搜索了一個解決方案,但我能找到的任何東西都與this question有關。
所以,這不是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
希望它有幫助!
你能告訴我你把這段代碼放在哪個文件中嗎? –
定義和緩存配置文件中的配置,HttpRequest類中的函數或類似的東西 – Bobot
我沒有使用Laravel,但是我有一個純PHP的簡單例子,如果它對你有些興趣 – Bobot
這將會很棒,也許它會告訴我如何在代理的黑暗水域中進行操作。 –