我正在尝试为我的网站设置自托管的 cdn,但是我在 htaccess 文件中的规则方面遇到了问题,无法使其正常工作。
目前,充当 CDN 的 ftp 服务器具有以下文件系统结构:
/
www/
www/htaccess
www/index.html
www/cdn/*
incremental/*
full/*
我的 .htaccess 现在看起来像这样:
Options All -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
#This snippet basically stops anyone viewing any file on your site that begins with "hta", this will protect it and make it somewhat safer.
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>
<Files /cdn>
Options +Indexes
Satisfy Any
Allow from all
</Files>
我想允许访问 cdn 文件夹并禁止任何其他访问其他文件夹,因为增量和完整备份中有我的主要服务器的备份。
我一直在寻找实现这种行为的规则,但没有任何效果。
我必须允许 cdn 文件夹中的索引吗?
提前致以问候并致谢(抱歉我的英语不好)
答案1
我不是在开玩笑,但这听起来根本不像你在构建 CDN。CDN 的整个概念取决于从最靠近用户的节点向用户提供内容,而不是让用户必须跋涉通过互联网到达单个盒子。
在您的研究中,您可能会遇到难以找出该做什么的问题,因为您添加了这个“CDN”概念,但它实际上并不相关。
我会重申之前的建议,将您的备份移出可访问网络的文件夹!
考虑到我认为您要完成的任务,我建议您设置单独的虚拟主机,将对给定 FQDN 的请求指向一个文件夹。这将使您更好地控制配置并确保数据仅对某些域可用。因此,您需要在 apache2/conf.d 目录中添加一个新文件(myconfig.conf,实际上可以是任何文件),如下所示:
<VirtualHost *:80>
DocumentRoot /mnt/www/DOMAIN_NAME/cdn
ServerName cdn.DOMAIN_NAME
</VirtualHost>
显然,您可以为文档路由使用任何您想要的内容,以上只是我的个人风格。创建目录路径 /mnt/www/DOMAIN_NAME/cdn,将 DOMAIN_NAME 替换为您使用的任何内容。然后,每当您点击 cdn.DOMAIN_NAME 时,它只会提供 /mnt/www/DOMAIN_NAME/cdn 目录中的文件。显然,这需要对 DNS 进行一些调整,以确保使用的 DOMAIN_NAME 的 cdn 子域指向此框。
编辑:添加新的.conf 文件后,不要忘记重新启动 apache!
希望这能有所帮助。不过,如果您需要的是真正的 CDN,我建议您使用 s3/cloudfront 或 Rackspace Cloudfiles 等服务,而不是 DIY 解决方案。它们是非常实惠的选择。