寻找自定义的PHP内容交付网络(CDN)脚本为我的服务器


Looking for custom PHP Content Delivery Network (CDN) script for my server

REF: https://en.wikipedia.org/wiki/Content_delivery_network

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

我正在寻找这样的脚本,可以支持高层次的缓存控制。

如果你知道用PHP开发的好的CDN脚本,你能分享吗?

这不是在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(你不应该这样做),只要使用你指定的无cookie子域名链接到你的无cookie内容,Apache会照顾剩下的。

更新

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

  • 允许任何域名链接到字体,这样他们就可以在没有cookie的情况下提供服务。
  • 设置ETAG报头,因为它应该设置。
  • 一些不坏的头字段,包括/摆脱。

然而,如果你使用HTTPS,还有最后一个安全问题要记住,那就是BREACH。为了防止这种解密技术,您可以从显示动态内容的任何页面中删除gzip压缩(gzip压缩静态内容,如静态HTML、CSS或JS仍然可以)。为了避免压缩特定的文件类型(如PHP),将其添加到SetEnvIfNoCase指令中,靠近本配置的开始。

或者,您可以保持启用压缩并使用GCM密码方法,因为BREACH系列攻击仅适用于CBC密码方法。尽管我很讨厌成为"那个家伙",但如果您想要配置这些东西,手册确实是最好的参考。这是一个相当复杂的主题,手册很好地解释了基础知识。