参考:https://en.wikipedia.org/wiki/Content_delivery_network
内容分发网络或内容分发网络是存储我们网站的计算机系统,因此可以从多个位置提供数据(图像/视频)。 但是,我不想使用任何在线付费/未付费CDN服务,但想在我自己的高速服务器上设置CDN。我做了很多谷歌,但没有看到任何这样的CDN脚本,我可以在我的服务器上安装。
我正在寻找可以支持高级缓存控制的脚本。
如果你知道用PHP开发的任何好的CDN脚本,请分享一下吗?
答案 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将负责其余的工作。
我在发布这个答案后添加了一些我学到的东西,例如:
但是,如果您使用的是HTTPS,请记住最后一个安全问题,即BREACH。为了防止这种解密技术,您可以从显示动态内容的任何页面中删除gzip压缩(GZIPping静态内容,如静态HTML,CSS或JS仍然可以)。要避免压缩某种文件类型(如PHP),请将其添加到此配置开头附近的SetEnvIfNoCase
指令中。
或者,您可以保持压缩并使用{BESACH系列攻击only work on the CBC
cipher method以来的GCM
密码方法。尽管我不喜欢成为“那个人”,但如果您想要配置这样的东西,the manual真的是最好的参考。这是一个相当复杂的主题,手册很好地解释了基础知识。