我们的 wordpress 网站已有数年历史,其中许多帖子已编入索引,在 Google 上的排名也很高。一旦出现严重流量,我的 wordpress 服务器就会崩溃 - 甚至在经过几轮 wordpress 优化后,这种情况仍然会发生。我们已经受够了 wordpress 问题,并决定迁移。
我们正在从 wordpress 迁移到静态站点以获得更好的性能,这样页面就不会为每个请求呈现,并且静态 html、css、js 和图像文件可以直接由 nginx Web 服务器提供,而不是访问后端的另一台服务器。
问题是我们有超过 400,000 个帖子,每个帖子都有一个静态页面,因此有一个静态文件夹,我们将在其中存储该帖子的相关文件,例如 html 和图像文件。所以我们的主 Web 文件夹将有超过 400,000 个子文件夹。这会在 Linux 上成为一个问题吗?或者这会对我的 Web 服务器性能造成影响吗?在这种情况下,我应该关注托管方面的什么吗?
这里有没有人尝试过将 ext4 与 nginx 结合使用,并且文件夹中有大量子文件夹?这真的会影响性能吗?关于 ext4 处理大量文件夹的性能,存在相互矛盾的报告……除非真的有必要,否则我们不想增加复杂性进行迁移。迁移对我们来说已经是一项艰巨的任务 :),我们希望尽可能保持简单,除非存在性能下降的真正风险。有没有人使用过 nginx webserver,并且单个文件夹中有大量子文件夹或文件?
先感谢您。
答案1
以下是减少目录数量的方法Artem S. Tashkinov 的回答并配置 nginx 以遵循原始 URL 结构。
为每个 URL 创建一个目录结构,每个 URL 的前两个字符是文档根目录下的目录。将以这两个字符开头的静态内容放在该目录下。
实现这一点的nginxlocation
非常简单:
location ~ /(..) {
root /srv/www/example.com/$1;
}
这只是取 URL 首字母后的前两个字符/
并将其附加到文档根目录。
请注意,这需要一切移动到两个字符的子目录中。其中包括顶层/index.html
,必须将其放置在$root/in/index.html
。再举一个例子,顶层 URL 路径/images
必须移动到$root/im/images
。原始文档根目录将只包含这两个字符的目录名。
您的文档 URL 将保持不变。例如,可在 访问的博客文章/15-things-to-do-when-visiting-dubai
将位于 的文件系统中$root/15/15-things-to-do-when-visiting-dubai/index.html
,但仍可通过原始 URL 访问。(请注意,如果您的原始 URL 没有尾部斜杠,则会添加一个,并生成 301 重定向以保护 SEO。)
最终,文档根目录最多只有几千个目录,每个目录最多可能有几百个目录或文件。任何 Linux 文件系统都可以轻松处理这个问题。
答案2
在最佳情况下,您应该避免在大多数文件系统中每个目录中包含超过几千个文件,因为否则遍历它将花费太多的时间和资源。
您可以创建如下目录结构:
- 00
- 01
- 02
...
- 费米
- FF
这将为您提供 256 个目录,并且您可以无限嵌套它们。
或者您可以尝试通过以下方式组织帖子/YYYY/MM/DD/$UID-post-title
答案3
由于该网站是静态的,那么如何将其托管在 AWS S3 上并使其成为 AWS 的问题呢?
S3 可以直接托管网站每个存储桶可以存储几乎无限数量的文件(称为对象)。过去,你必须非常小心地命名文件,但现在已基本解决现在这不是什么大问题。不过,请阅读性能指南,并进行良好的测试。
S3 的存储或带宽并不总是便宜的,你应该使用AWS 计算器计算您的成本(新计算器似乎不计算 S3 价格)。您可以通过在将对象上传到 S3 时向每个对象添加缓存标头,然后将 S3 存储桶放在后面,从而在一定程度上降低流量成本CloudFlare CDN(看这个问题)。CloudFlare 有免费和付费计划,但是鉴于如此多的流量和内容,我预计您会想要付费计划。