如何通过将WordPress网站静态化并通过S3+CloudFront进行分发
我被要求在某个项目中更新WordPress网站,因此需要将其迁移到S3+CloudFront。我将总结一下步骤。
※因为我要睡着了,所以这个翻译可能很随便,省略了中间的步骤。我也觉得可能会有错别字,有时间的话会进行修正。
在WordPress中的准备工作:消除动态元素的部分。
步骤1:在开始迁移前进行备份。
让我们备份一切。
首先,在开始工作之前,备份WordPress文件数据库,以便随时可以恢复。
第二步:去除动态要素。
每次WordPress页面被访问时,根据用户的行为可能显示不同内容。例如,我个人称其为”动态元素”,如邮件表单等可以接收一般用户信息的功能。
-
- メールフォーム
PHP は動かないので、別のサービスを利用するか、お問い合わせフォームだけ、PHP,
画像・テキスト・リンクランダム表示するウィジェット
ウィジェットのタイトルを「ランダム」から「ピックアップ」などに変更するだけでも良い
リンクがランダムで切り替わるもの
/?page_id=XXX などパーマリンクがクエリとして登録されている
これ鬼門です
第三步:修复原始网站上可修复的部分(可选)
修复链接错误
有些网站的内容可能过时,链接也可能会出现 404 错误。
有很多工具可以用来检测链接失效,例如WordPress插件、Chrome扩展、npm包等。根据自己的环境选择合适的工具进行安装,然后确认链接是否失效。
-
- WordPress プラグイン: Broken Link Checker
npm パッケージ: Broken Link Checker
将WordPress静态化后,维护变得麻烦。在WordPress中修正链接地址吧。
将Google Analytics标签迁移至Google Tag Manager.
如果您直接嵌入Google Analytics标签,那么在对HTML进行处理后更新会很麻烦,建议转移到Google Tag Manager,然后就可以方便地进行管理和操作了。
步骤4:禁用不需要的插件。
通过将其转换为静态HTML,我们可以禁用无法正常工作的插件。
步骤五:禁用并删除搜索引擎系统。
如果不使用外部服务,搜索功能将无法运行。在WordPress中使用的搜索功能应该被禁用,并且删除搜索关键词输入框等内容。
第6步:保存404页面
请将404等错误页面保存为名为error.html的HTML文件,以备将来使用。
后面提到的Simply Static插件无法静态化错误页面。
如果不需要进行奇怪的替换处理,只需使用 Google Chrome 等浏览器来保存 HTML。
第7步:安装WordPress静态化插件。
这次我们使用了Simply Static。
-
- プラグインをインストール
- 出力実行
获取已HTML编码的软件包。
第八步:创建S3存储桶并上传文件
创建一个以任何名称命名的S3存储桶。
-
- Static Web Hosting を有効化
index.html & error.html を設定
Bucket Policy ではパブリックアクセス許可しましょう
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFront",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3::バケット名/*"
}
]
}
我本来希望启用 OAC,但为了正确显示 index.html、403和404页面,需要使用静态网页托管功能,因此在 S3 上需要启用公共访问权限。
创建 S3 存储桶后,将由WordPress生成的HTML文件上传。
掌握 AWS CLI 的 s3 sync 或 s3 cp 命令,可以快速便捷地进行文件传输。
步骤9: 设置CloudFront函数。
在底层页面,以斜杠结尾的URL无法正确地访问该目录中的index.html文件。
可以使用CloudFront功能来替代。
名称:重定向到index.html
function handler(event) {
var request = event.request;
if (request.uri !== "/" && (request.uri.endsWith("/") || request.uri.lastIndexOf(".") < request.uri.lastIndexOf("/"))) {
if (request.uri.endsWith("/")) {
request.uri = request.uri.concat("index.html");
} else {
request.uri = request.uri.concat("/index.html");
}
}
return request;
}
- 参考: Redirect to index.html for S3 subfolder
通过这样的设置,即使在较低级别的路径或者以斜杆结尾的 URL ,也会去查看 /index.html。
如果有特殊情况,例如index.htm等,请根据需要修改上述的Javascript。
第十步:生成SSL证书
让我们在位于弗吉尼亚地区(us-east-1)的ACM中发行或注册用于CloudFront的SSL证书。
步骤 11:创建 CloudFront 分发
あとは、CloudFront + S3 な静的 Web サイトを作る容量で、Distribition を作成してください。
SSL 証明書を選択。
オリジンは S3 の静的 Web ホスティングのエンドポイント を使用します。
403 や 404 などのエラーページを、S3 の設定時に登録した error.html (STEP 6参照) を指定して表示するようにします。
第12步:更改主机并进行显示测试
在切换之前进行显示测试。
使用dig命令等查找CloudFront或S3的终端节点,并获取该时刻的A记录。
(CloudFront & S3 は頻繁に IP アドレスが変わります)
dig xxxxxx.cloudfront.net
然后,我会修改自己电脑上的hosts文件,并进行显示测试。
XXX.XXX.XXX.XXX exmaple.com
这个时候,您可以测试SSL证书和CloudFront功能。
最重要的是确认是否存在链接失效等问题。
使用在第3步介绍的npm包Broken Link Checker,可以在静态HTML网站化后,检查网站的链接是否存在切断。
我发现在我的情况下,部分图像没有正确输出,JS、SVG文件在主题文件夹中也没有正确地输出到HTML包中。
ひとまず、最低限必要なファイルは、Google Chrome の Developer ツールを使い 404 になっているファイルを探して、WordPress サイトから手動で移動しました。
步骤十三:DNS正式切换
通过更改DNS设置,您可以成功使WordPress网站静态化。
以上 – the above