Používal som CloudFlare na zníženie zaťaženia prevádzkou, no zistil som, že keďže umiestnenie pripojenia je LAX (Los Angeles), rýchlosť sa výrazne znížila. Preto som narýchlo vytvoril toto riešenie, aby sa dalo používať ako CDN.
Tento server sa nachádza v Tokiu (Vultr).
Princíp spočíva v presmerovaní kilho.net/{파일} na cdn.kilho.net/{파일}, čím sa rozloží prevádzka hlavného hostingu.
[PHP]
<?
$cfg[‚url‘] = ‚kilho.net‘;
$cfg[‚cache‘] = ‚../data/cache‘;
$url = $_SERVER[‚REQUEST_SCHEME‘].‘://‘.$cfg[‚url‘].$_SERVER[‚REQUEST_URI‘];
$url_arr = parse_url($url);
switch($_SERVER[‚REQUEST_METHOD‘])
{
case ‚GET‘:
$filename = $cfg[‚cache‘].$url_arr[‚path‘];
$dirname = dirname($filename);
if(!is_file($filename))
{
if(!is_dir($dirname)) mkdir($dirname, 0707, true);
$ch = curl_init();
$fp = fopen($filename, ‚w‘);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER[‚REQUEST_SCHEME‘].‘://‘.$cfg[‚url‘]);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
switch($code = curl_getinfo($ch, CURLINFO_HTTP_CODE))
{
case 200:
break;
default:
touch($filename, $code);
}
curl_close($ch);
}
if(is_file($filename))
{
$filetime = filemtime($filename);
if($filetime<1000)
{
header(‚HTTP/1.0 ‚.$filetime);
} else {
include ‚_mime.php‘;
$filetype = get_mime($filename);
$lastmodified = filemtime($filename);
$etag = md5_file($filename);
header(‚Content-Type: ‚.$filetype);
header(‚Expires: ‚.gmdate(‚D, d M Y H:i:s‘, time()+77760000).‘ GMT‘);
header(‚Cache-Control: public, max-age=77760000‘);
header(‚Last-Modified: ‚.gmdate(‚D, d M Y H:i:s‘, $lastmodified).‘ GMT‘);
header(‚Etag: ‚.$etag);
header(‚Access-Control-Allow-Origin: *‘);
if(isset($_SERVER[‚HTTP_IF_MODIFIED_SINCE‘]))
{
if($_SERVER[‚HTTP_IF_MODIFIED_SINCE‘]==gmdate(‚D, d M Y H:i:s‘, $lastmodified).‘ GMT’||$_SERVER[‚HTTP_IF_NONE_MATCH‘]==$etag)
{
header(‚HTTP/1.0 304 Not Modified‘);
exit;
}
}
}
if(strstr($_SERVER[‚HTTP_ACCEPT_ENCODING‘], ‚gzip‘))
if(in_array($filetype, array(‚text/plain‘, ‚text/html‘, ‚text/css‘, ‚text/javascript‘, ‚application/json‘, ‚application/xml‘)))
ob_start(‚ob_gzhandler‘);
$fp = fopen($filename, ‚rb‘);
fpassthru($fp);
fclose ($fp);
exit;
}
break;
case ‚POST‘:
case ‚PUT‘:
case ‚DELETE‘;
break;
}
header(‚HTTP/1.0 404 File Not Found.‘);
?>
[/PHP]


eeee