为自托管 CDN 配置 htaccess 文件

为自托管 CDN 配置 htaccess 文件

我正在尝试为我的网站设置自托管的 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 解决方案。它们是非常实惠的选择。

相关内容