PHP로 만든 단순한 CDN 서비스 모듈

 

트래픽 부하를 줄이기 위해 CloudFlare 를 사용하였는데 연결위치가 LAX(로스엔젤레스)라 속도가 많이 느려지는것을 확인하고 급하게 CDN 형태로 사용하고자 만들었습니다.

해당 서버는 도쿄(Vultr)에 위치해 있습니다.

원리는 kilho.net/{파일} 을 cdn.kilho.net/{파일} 로 연결하여 메인 호스팅의 트래픽을 분산합니다.


<?
$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.');
?>

도깨비 촛불 앱 등록

요즘 한참 즐겨보는 “도깨비”란 드라마를 보다 생각나서 만든 앱입니다.

 

촛불을 바람 불어 끄면 도깨비(공유)를 호출하는걸 보고,

앱에서는 SMS 문자를 전송하도록 만들었습니다.

*  추가사항

  1. 해결의 촛불이 추가 되었습니다.
    고민이 있을때 바람을 불어보세요~
  2. 플래시 기능이 추가 되었습니다.

 

 

회원 인증, 가입에 SSL 을 적용하였습니다.

data-key-571156_1280

CloudFlare 을 이용하여 회원가입 및 인증페이지에 한해 SSL 을 적용하였습니다.

여러 브라우저에서 정상적으로 작동되는 것으로 확인하였습니다.

혹시나 로그인 및 가입이 되지 않는 경우 사용하시는 OS, 브라우저 정보를 아래 메일 주소로 보내주시면 감사하겠습니다.

(이메일: [email protected])

서버 이전 하였습니다.

hand-truck-564242_1280

메인 도메인(하위 도메인 제외)이 운영중인 서버를 이전하였습니다.

기존에는 카페24 에서 서비스를 받고 있었는데, centos 버전등의 문제로 인해 openssl 업그레이드가 불가능하다는 답변을 받고 워드프레스 코어, 플러그인 등 소스를 수정하여 임시방편으로 운영하였는데, 계속 되는 업그레이드로 인해 부득이하게 이전 하게 되었습니다.

현재 여러 사용자들이 워드프레스 호스팅을 추천한 아이비호스팅으로 이전하였습니다.

네임서버 변경 등 수시간 접속이 원할하지 않을 수 있으니 이점 양해 부탁드립니다.

혹시라도 문제를 발견하시면 [email protected] 으로 메일 주시면 빠른 수정하겠습니다.

감사합니다.

HTTP 접속 정보 기록

php-151199_640

 

OpenAPI 이용시 테스트 겸 접속 정보가 제대로 됬는지 확인용

접속시 메소스값, 호스트, POST 값


<?
$log = $_SERVER['REQUEST_METHOD'].' '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."\n\n";

foreach($_SERVER as $k => $v)
{
if($k=='HTTP_HOST') continue;
if(substr($k, 0,5)!='HTTP_') continue;
$log .= '$k: $v'."\n";
}

$log .= "\n";

$post = array_map('urldecode', explode('&', file_get_contents('php://input')));
foreach($post as $v)
{
$log .= "$v\n";
}

$log .= "-----------------------------------\n";

file_put_contents('log.txt', $log, FILE_APPEND | LOCK_EX);
?>