简单静态资源分发脚本

网站静态资源太多的情况下有时候我们需要分成多个域名来请求这些静态资源。
如原来我们使用的

http://static.ioio.name/upload/hello.jpg

改成随机的使用

http://s1.ioio.name/upload/hello.jpg
http://s2.ioio.name/upload/hello.jpg
http://s3.ioio.name/upload/hello.jpg

这时候我们需要将s1/s2/s3服务器上的文件跟源服务器static同步。以使得他们都是访问的static上同名文件的拷贝。

这里我写了一段简单的php脚本采用溯源的策略来更新这些文件,当s1/s2/s3服务器上不存在该文件的时候,就向源服务器(static)请求该文件,并且保存在本地cache一份以便后续的相同请求使用。

1.在s1/s2/s3服务器上添加名为cdn.php的文件,内容如下:

<?php
$path = $_GET["name"];
$filename = md5($path);
$file = "save/".$filename.".data";
if(file_exists($file)){
	header('Content-type: '.mime_content_type($file));
	echo file_get_contents($file);
}else{
	$content = file_get_contents("http://source.ioio.name/upload/".$path);
	file_put_contents($file,$content);
	header('Content-type: '.mime_content_type($file));
	echo $content;
}
?>

这段脚本会将读取到的文件存在本地的save文件夹里,需要save文件夹的读写权限。

2.配置.htaccess文件,添加一行记录:

RewriteRule ^upload/(.*)$ /cdn.php?name=$1 [L]

这样配置后s1/s2/s3就能按照static的路径规则访问到相同的文件了。在实际的生成环境,可能会需要更复杂的cache策略,这里就不深入讨论。
-EOF-

在Mac OS X中启用Apache与PHP

Mac OS内置了Apache和PHP的支持,需要使用只需要打开相应配置即可。

启动Apache
打开“系统设置偏好(System Preferences)” -> “共享(Sharing)” -> “Web共享(Web Sharing)”

打开浏览器访问http://localhost就可以看到”It works!”,而Mac OS系统默认用户站点访问路径是http://localhost/~username形式的,这给我们平时使用带来诸多不便,这里我们将其稍作修改使http://localhost直接访问自己的站点目录。

  1. 打开终端,进入到自己的站点目录,获得自己站点位置的路径
    cd sites
    pwd

    此时输出
    /Users/Username/sites

  2. 运行
    sudo vim /etc/apache2/httpd.conf

    找到/Library/WebServer/Documents(有两处)
    将其替换为上面得到的站点路径/Users/Username/sites

  3. 保存文件, 运行
    sudo apachectl restart

    重启Apache。

从访问http://localhost, 便是访问自己站点目录下的文件了。

启用PHP

  1. 在终端运行
    sudo vim /etc/apache2/httpd.conf
  2. 找到“#LoadModule php5_module libexec/apache2/libphp5.so”,把前面的#号去掉。

  3. 保存文件, 运行
    sudo apachectl restart

    重启Apache。

写个php文件

<?php 
echo phpinfo();
?>

命名成info.php放置到站点目录下,然后访问http://localhost/info.php就可以看到PHP的相关信息了。
-EOF-