我们的 wordpress 网站已有数年历史,有许多帖子被索引并在 google 上排名很好。对于任何严重的流量,我的 wordpress 服务器都无法使用 - 即使在几轮 wordpress 优化之后也会发生这种情况。我们已经受够了 wordpress 问题,并决定迁移。
我们正在从 wordpress 迁移到静态站点以获得更好的性能,以便不会为每个请求呈现页面,并且静态 html、css、js 和图像文件可以直接由 nginx Web 服务器提供,而不是在后端访问另一台服务器。
问题是我们有超过 400,000 个帖子,每个帖子都有一个静态页面,因此我们将在其中存储相关文件,例如该帖子的 html 和图像文件。所以我们的主网络文件夹将有超过 400,000 个子文件夹。这会是Linux上的问题吗?或者这会成为我的 Web 服务器性能的问题吗?在这种情况下,托管方面有什么我应该关心的吗?
这里有没有人尝试过将 ext4 与 nginx 一起使用,并且文件夹中有大量子文件夹?真的会影响性能吗?有关于 ext4 处理大量文件夹的性能的相互矛盾的报告......我们不希望迁移增加复杂性,除非确实有必要。迁移对我们来说已经是一项艰巨的任务 :) 并且我们希望使其尽可能简单,除非存在性能下降的真正风险。有没有人在单个文件夹中使用具有大量子文件夹或文件的 nginx 网络服务器?
先感谢您。
这是一种减少Artem S. Tashkinov 的回答中给出的目录数量并配置 nginx 以遵守原始 URL 结构的方法。
为每个 URL 创建一个目录结构,每个 URL 的前两个字符是文档根目录下的一个目录。将以这两个字符开头的静态内容放在该目录下。
使这成为可能的 nginx
location
非常简单:这只是将 URL 的前两个字符放在初始字符之后
/
,并将其附加到文档根目录。请注意,这需要将所有内容移动到两个字符子目录中。这包括顶层
/index.html
,它必须放在$root/in/index.html
./images
作为另一个示例,必须将顶级 URL 路径移动到$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 文件系统处理。
在最好的情况下,您应该避免在大多数文件系统中每个目录有超过几千个文件,否则遍历它会花费太多时间和资源。
您可以创建一个目录结构,例如:
...
这将为您提供 256 个目录,并且您可以无限嵌套它们。
或者您可以尝试通过以下方式组织帖子
/YYYY/MM/DD/$UID-post-title
由于该站点是静态的,如何将其托管在 AWS S3 上并使其成为 AWS 的问题?
S3 可以直接托管网站,并且每个存储桶可以在存储桶中存储几乎无限数量的文件(它称为对象)。您过去必须非常小心文件命名,但这已基本解决,现在不是大问题。不过请阅读性能指南,并进行良好的测试。
S3 的存储或带宽并不总是便宜的,您应该使用AWS 计算器来计算您的成本(新的计算器似乎没有进行 S3 定价)。您可以通过在将每个对象上传到 S3 时向每个对象添加缓存标头,然后将您的 S3 存储桶放在CloudFlare CDN后面(请参阅此问题)来降低流量成本。CloudFlare 有免费和付费计划,但有这么多的流量和内容,我希望你会想要一个付费计划。