알짜게시판

[PHP] CDN 간단히 구축하기

1. cdn.kilho.net 에 index.php 로 아래 코드를 저장 (.htaccess 로 존재하지 않는 파일은 index.php 로 연결)
2. cdn.kilho.net/{파일} 로 접속시 kilho.net/{파일} 을 다운 및 캐시로 사용합니다.

[code]
<?php
// 설정
$cfg['url'] = 'kilho.net';
$cfg['cache'] = '../data/cache/';

// 메인
$url = 'http://'.$cfg['url'].$_SERVER['REQUEST_URI'];
$url_arr = parse_url($url);

if($_SERVER['REQUEST_METHOD']!='GET')
{
header('HTTP/1.0 404 File Not Found.');
exit;
}

$cfg['cache'] .= sha1($url_arr['host'].$url_arr['path']);

$dirname = dirname($cfg['cache']);
if(!is_file($cfg['cache']))
{
if(!is_dir($dirname)) mkdir($dirname, 0707, true);

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accpet: */*'));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_SCHEME'].'://'.$cfg['url']);
$data = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

$fp = fopen($cfg['cache'], 'w');
fwrite($fp, $info['content_type']."\n".$data);
fclose($fp);

if($info['http_code']!=200)
touch($cfg['cache'], $info['http_code']);
}

$filetime = filemtime($cfg['cache']);

if($filetime<1000)
{
header('HTTP/1.0 '.$filetime);
} else {
$lastmodified = filemtime($cfg['cache']);
$etag = md5_file($cfg['cache']);

header('Expires: '.gmdate('D, d M Y H:i:s', time()+77760000).' GMT');
header('Cache-Control: public, max-age=77760000');
header('Etag: '.$etag);
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastmodified).' GMT');
header('Access-Control-Allow-Origin: *'); 
}

$fp = fopen($cfg['cache'], 'rb');
$filetype = fgets($fp, 255);
header('Content-Type: '.$filetype);
while(!feof($fp)) echo fread($fp, 1024);
fclose ($fp);
?>
[/code]

로그인 후 댓글내용을 입력해주세요

번호 제목 글쓴이 조회 날짜
154 [MYSQL] 날짜필드 연장하기 2,128 03-20
153 [워드프레스] 회원가입시 닉네임 필드 추가하기 2,754 09-21
152 [그누보드] 임의로 테마설정하기 2,730 09-16
151 [리눅스] Swap 생성/수정 2,383 09-04
150 [리눅스] 바이러스 검사 2,192 09-04
149 [그누보드] CKEditor 5 플러그인 5,302 08-27
148 [PHP] 실시간 화면 출력 4,406 08-04
147 [그누보드] 클라우드플레어(Cloudflare) 사용시 아이피 주소 및 URL Schemes 정정 6,214 07-27
146 [윈도우] 원격 데스크탑 접속 기록 삭제하기 3,449 07-24
145 [윈도우] 네트워크 드라이브 커맨드 명령으로 연결하기 1,798 07-11
144 [MYSQL] 계정 추가 및 외부 접속 허용 1,799 07-05
143 [PHP] 변수를 텍스트로 저장 및 캐시로 사용하기 3,384 06-30
142 VS Code 설치방법 2,384 06-30
141 시크릿SNI 화이트 리스트 등록하기 2 15,437 06-29
140 구글 google 영어 사이트로 접속하기 3,602 06-20
139 [PHP] 지정 폴더 내 PHP 파일 최종 수정일 확인하기 2,351 06-20
138 [안드로이드] 구글 검색기록 끄기 2,235 06-14
137 [윈도우] 레지스트리 변경값 추적하는 프로그램 6,778 06-14
136 [리눅스] 간단한 보안 체크하기 2,058 06-05
135 크롬 알림창 해제하기 2,250 05-28
134 [그누보드] 훅을 통한 글쓰기, 댓글 알림 71,057 05-26
열람 [PHP] CDN 간단히 구축하기 2,997 05-21
132 [그누보드] Syntax Highlight 적용하기 75,651 05-19
131 [워드프레스] 단어 수정하기 2,551 05-19
130 Go 언어 설치하기 2,051 05-16
129 WinDivert1.4 서비스 종료 10,690 02-24
128 ChangeDNS 12,959 10-22
127 [SimpleChat] HTML 태그 처리 방지 패치 16,934 09-16
126 워프 무료 SSL 16,364 09-10
125 윈도우 용 git 16,343 08-31
124 윈도우 8 4만원에 17,758 07-04