寻找我的服务器的自定义PHP Content Delivery Network(CDN)脚本

时间:2013-06-05 15:19:53

标签: php cdn content-delivery-network

参考:https://en.wikipedia.org/wiki/Content_delivery_network

内容分发网络或内容分发网络是存储我们网站的计算机系统,因此可以从多个位置提供数据(图像/视频)。 但是,我不想使用任何在线付费/未付费CDN服务,但想在我自己的高速服务器上设置CDN。我做了很多谷歌,但没有看到任何这样的CDN脚本,我可以在我的服务器上安装。

我正在寻找可以支持高级缓存控制的脚本。

如果你知道用PHP开发的任何好的CDN脚本,请分享一下吗?

1 个答案:

答案 0 :(得分:7)

这不是在PHP中完成的,这是在Apache中完成的。

我在自己的家庭服务器上做了什么(可能就是你想要的),设置了一个无cookie的子域来提供内容,并启用缓存和GZip。以下Apache配置都位于网站目录中的.htaccess文件中。

# GZIP compression
SetOutputFilter DEFLATE

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(eot|ico|gif|jpe?g|php|png|ttf|svg|woff)$ no-gzip dont-vary

# Fonts on a cookieless subdomain
<FilesMatch "\.(eot|ttf|svg|woff)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>


# Cookieless Static Content
<FilesMatch "\.(css|eot|ico|gif|jpe?g|js|png|ttf|svg|woff)$">
Header unset Cookie
Header unset Set-Cookie
</FilesMatch>

# Caching
ExpiresActive On
ExpiresDefault A0

<FilesMatch "\.(eot|ico|gif|jpe?g|png|ttf|svg|woff)$">
# 2 year caching for images and stuff
ExpiresDefault A31536000
Header append Cache-Control "public"
</FilesMatch>

<FilesMatch "\.(css|js)$">
# 1 week caching for styles and scripts
ExpiresDefault A604800
Header append Cache-Control "public"
</FilesMatch>

#Other Header Manipulation
FileETag MTime Size
Header unset X-Powered-By
AddDefaultCharset UTF-8
DefaultLanguage en-US

只要您不介意在主域(您不应该使用)上进行缓存和GZip,只需使用指定的cookielesss子域链接到您的无cookie内容,Apache将负责其余的工作。

更新

我在发布这个答案后添加了一些我学到的东西,例如:

  • 允许任何域链接到字体,以便在没有cookie的情况下提供它们。
  • 设置ETAG标题,因为它should be set
  • 其他一些可以包含/删除的标题字段。

但是,如果您使用的是HTTPS,请记住最后一个安全问题,即BREACH。为了防止这种解密技术,您可以从显示动态内容的任何页面中删除gzip压缩(GZIPping静态内容,如静态HTML,CSS或JS仍然可以)。要避免压缩某种文件类型(如PHP),请将其添加到此配置开头附近的SetEnvIfNoCase指令中。

或者,您可以保持压缩并使用{BESACH系列攻击only work on the CBC cipher method以来的GCM密码方法。尽管我不喜欢成为“那个人”,但如果您想要配置这样的东西,the manual真的是最好的参考。这是一个相当复杂的主题,手册很好地解释了基础知识。