当前位置: 首页 > news >正文

自制简单的image图片服务器,404原理

为什么80%的码农都做不了架构师?>>>   hot3.png

        随着网站的访问量增加,页面打开过程中,图片下载就占了好大一部分,今天就分享一种简单易用的方法来建立图片服务器,将主网站的图片访问压力转移到另外一台服务器上,经过这种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是必须图片,还有就是需要判断只允许目标主机进行访问,还有很多需要改进的地方,欢迎大家讨论!

转载于:https://my.oschina.net/ruiorz/blog/280520

相关文章:

  • 统计学图书列表
  • mongodbOperator
  • ASP.NET 进度条(附源代码)
  • mysql数据库参数文件性能调试工具:tuning-primer.sh
  • 你要金婚?还是金色软件?
  • OpenGL三维显示中纹理闪烁和颜色跳变的问题
  • Tom Baeyens谈过程虚拟机
  • 【博客园发文技巧】不离开编辑页面,批量添加图片链接和设置图片大小
  • 治大国若烹小鲜
  • JSONP使用笔记
  • AJAX 中Sys.WebForms.PageRequestManager(ajax请求添加客户端事件)的事件激发顺序
  • 为 IBM Lotus Notes V8 构建复合应用程序(七)
  • Android数据的四种存储方式之SQLite数据库
  • SER+SEMS完全手册
  • C#性能测试方法
  • Angular6错误 Service: No provider for Renderer2
  • AngularJS指令开发(1)——参数详解
  • Apache Pulsar 2.1 重磅发布
  • CSS实用技巧
  • Debian下无root权限使用Python访问Oracle
  • Fastjson的基本使用方法大全
  • Kibana配置logstash,报表一体化
  • Material Design
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 搭建gitbook 和 访问权限认证
  • 电商搜索引擎的架构设计和性能优化
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 【干货分享】dos命令大全
  • UI设计初学者应该如何入门?
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​人工智能书单(数学基础篇)
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #HarmonyOS:基础语法
  • $.ajax()参数及用法
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (排序详解之 堆排序)
  • .CSS-hover 的解释
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET delegate 委托 、 Event 事件
  • @RestControllerAdvice异常统一处理类失效原因
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [1127]图形打印 sdutOJ
  • [51nod1610]路径计数
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [ESP32 IDF]web server
  • [NOI2005]聪聪与可可(期望)
  • [Notice] 朋友们,blog更新http://jiang-hongfei.spaces.live.com
  • [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)
  • [Python] 字典操作及方法总结
  • [Spring] Spring Boot 生态
  • [SQL]实现按照指定分割分分割字符串
  • [UVALive 3716] DNA Regions