为什么80%的码农都做不了架构师?>>>
随着网站的访问量增加,页面打开过程中,图片下载就占了好大一部分,今天就分享一种简单易用的方法来建立图片服务器,将主网站的图片访问压力转移到另外一台服务器上,经过这种404简单而又快速的方法,使网站的访问速度将大大提升。
方法如下:
假设现有网站 http://www.yourdomain.com,
且现有网站中图片访问的url都是基于http://www.yourdomain.com/assets/uploads/2014/0516/140023223793340.jpg
第一步:建立图片服务器
装个nginx即可,关于nginx安装,网上自己搜,也可参考我前面的一篇博客http://my.oschina.net/ruiorz/blog/280289
在nginx.conf中配置:
# 在server中添加或修改如下:
server_name img01.yourdumain.com;
error_page 404 /404.php
编辑虚拟主机目录下的404.php文件
vi /data/htdocs/img01.yourdumain.com/404.php
输入一下内容:
<?php
$base_host = "http://www.yourdumain.com"; //这里是主机器的host
//获取图片访问的url,如:/assets/uploads/2014/0516/140023223793340.jpg
$url = $_SERVER["REQUEST_URI"];
//获取目录信息,如:/assets/uploads/2014/0516
$dir = dirname($url);
//存放目标目录(图片服务器的根目录)
$save_dir = "/data/htdocs/img01.yourdumain.com";
//建立目录,判断目录/data/htdocs/img01.yourdumain.com/assets/uploads/2014/0516是否存在
if( !is_dir($save_dir . $dir) ){
//没有目录则创建目录
mkdir($save_dir . $dir, 0777, true);
}
//开始下载图片
$status = curl_download($base_host . $url, $save_dir . $url);
if($status != 200){
@unlink($save_dir . $dir);
}
header("Location:" . $base_host . $url);
exit;
//下载图片到本地的方法
function curl_download($remote, $local) {
$cp = curl_init();
$fp = fopen($local, "w");
curl_setopt($cp, CURLOPT_URL, $remote);
curl_setopt($cp, CURLOPT_FILE, $fp);
curl_setopt($cp, CURLOPT_HEADER, 0);
curl_exec($cp);
$status = curl_getinfo($cp,CURLINFO_HTTP_CODE);
curl_close($cp);
fclose($fp);
return $status;
}
第二步:调试运行
将主机器的图片前缀改为 http://img01.yourdomain.com,例如:
<img src="http://www.yourdumain.com/assets/uploads/2014/0516/140023223793340.jpg" />
改为:
<img src="http://img01.yourdumain.com/assets/uploads/2014/0516/140023223793340.jpg" />
大功告成!
注:此种简单的方法仅供参考,只是为了告诉大家原理,并没有进行如何安全性的处理,例如判断访问url是必须图片,还有就是需要判断只允许目标主机进行访问,还有很多需要改进的地方,欢迎大家讨论!