という具合に、WordPressのコンテンツをHTMLファイルとして出力して、HTMLファイルを配信することで、安くて高速なサイトを簡単に構築できます。
「Local」を使用するとこで簡単に自分のPCにWordPressをインストールできます。
WindowsでもmacOSでも使えます。
以下のURLから「Local」をダウンロードしてインストールします。
インストールが完了したら、Word Pressの管理画面からパーマリンク設定をします。
WordPress管理画面の設定->パーマリンク画面を開き、カスタム構造を選択し、「/%postname%.html」を入力します。
次に、staticpress2019プラグインの設定に進みます。
WordPress の管理画面[プラグイン]-[新規追加]から「staticpress2019」をインストールして有効化します。これだけです。
インストールした「staticpress2019」の画面で「再構築」ボタンを押下します。これだけです。
あとはHTMLファイルを配信サーバーにアップロードします。
サーバーは別途契約する必要があります。
おすすめのサーバなどなど以下に記載します。
]]>この記事でのサーバレスとはS3+CloudFrontでコンテンツ配信をすることを指しています。
サーバーレスにすることで以下のようなメリットがあります。
では、構築手順を記載していきます。
まずゴールイメージです。以下のような構成となります。サイト閲覧者はCloudFront経由でS3に格納されたコンテンツ(WordPressコンテンツを静的HTMLにしたもの)にアクセスすることになります。
使用するAWSサービスとWordPressプラグインについて記載します。
では、早速構築をしていきます。
まずはS3の作成から始めていきます。
任意のバケット名でS3バケットを作成します。
まず、ディストリビューションを作成し、オリジンの編集からS3に設定するポリシーを取得という流れになります。
CloudFrontとS3間はOACで設定を行います。
OACについて分からなくても以下の通り進めれば大丈夫です。
CloudFront+S3でOACを使う
次に、CloudFrontの設定画面(以下の画面)から設定ボタンを押下して、デフォルトルートオブジェクトに「index.html」を設定します。
CloudFront設定
以下の手順でS3の設定を行います
EC2起動時のインスタンス設定
WordPress EC2システムログ
EC2インスタンス詳細
以下のようなコマンドでSSH接続可能です。ユーザが「bitnami」である点が要注意です。
ssh -i “{sshキー}” bitnami@{パブリック IPv4 DNS}
起動したEC2に以下の権限を割り当てます
// EC2に割り当てが必要な権限(ポリシー)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": "*"
}
]
}
WordPressの設定->パーマリンク画面を開き、カスタム構造を選択し、「/%postname%.html」を入力する
staticpress2019設定
WordPressコンテンツのサーバレス配信について記載しました。
など難しい作業をせずにWordPressコンテンツのサーバレス配信できました。
結構簡単かと思いますので、気になる方は是非★
]]>AWS上に構築する方法は5つのパターンがあり、それぞれ特徴やメリットとデメリットがありますので、この点について記載していきます。
構築パターンの特徴を知って適切な構築方法を選択しよう!という記事です。
まずはどのような構築方法があるかについて記載していきます。
構築方法は以下の5つの方法があります。それぞれ特徴と難易度が異なってきます。
構築方法 | 特徴 | 難易度 |
EC2単体 | ・EC2単体でシンプルに構築 | ★
シンプルな構成なので、構築が簡単 |
EC2単体ー静的ページ配信 | ・WordPressのコンテンツを静的ページ化したものを配信 | ★★★
静的ページ化するためのプラグインの設定が必要なので、少し難易度高め |
EC2+CloudFront配信 | ・WordPressのコンテンツをCloudFront経由で配信 | ★★★
CloudFrontの設定が必要なため、少し難易度高め |
EC2ー静的ページ+CloudFront配信 | ・WordPressのコンテンツを静的ページ化したものをCloudFront経由で配信 | ★★★★
静的ページ化するためのプラグインの設定が必要、かつ、CloudFrontの設定が必要なため、難易度高め |
EC2ー静的ページ+S3+CloudFront配信 | ・WordPressのコンテンツを静的ページ化したものをS3に格納し、CloudFront経由で配信 | ★★★★★
静的ページ化するためのプラグインの設定が必要、かつ、静的ページをS3に転送が必要で、CloudFrontの設定も必要なため、難易度が最も高い |
次に、WordPressの構築方法毎の比較を行っていきます。
EC2単体 | EC2単体ー静的ページ配信 | EC2+CloudFront配信 | EC2ー静的ページ+CloudFront配信 | EC2ー静的ページ+S3+CloudFront配信 | |
使用するAWSサービス | EC2(Lightsailでも可) | EC2(Lightsailでも可) | EC2(Lightsailでも可)
CloudFront |
EC2(Lightsailでも可)
CloudFront |
EC2(Lightsailでも可)
S3 CloudFront |
使用するWordPressプラグイン |
ー | StaticPress | Clear CloudFront Cahce | StaticPress
Clear CloudFront Cahce |
StaticPress
StaticPress S3 Clear CloudFront Cahce |
配信方式 |
サイトアクセスの度にWordPress(PHP)がページを生成する | WordPressコンテンツを静的ページ化しておき、サイトアクセス時は静的ページを表示する(サイトアクセス時はWordPressは動かない) | CloudFrontがページをキャッシュしていて、サイトアクセス時はCloudFrontのキャッシュを見ることになる
ただし、CloudFrontにキャッシュがない場合、EC2でWordPress(PHP)がページを生成する動きとなる(EC2単体と同様)
|
CloudFrontがページをキャッシュしていて、サイトアクセス時はCloudFrontのキャッシュを見ることになる
ただし、CloudFrontにキャッシュがない場合、EC上の静的ページにアクセスすることとなる(EC2単体ー静的ページ配信と同様) |
CloudFrontがページをキャッシュしていて、サイトアクセス時はCloudFrontのキャッシュを見ることになる
ただし、CloudFrontにキャッシュがない場合、S3上の静的ページにアクセスすることとなる |
WordPressコンテンツの表示速度 | ★
サイトアクセスの度にWordPress(PHP)がページを生成するため、表示速度が遅くなりやすい |
★★
静的ページ化しているため、サイトアクセス時はWordPress(PHP)は動かないので、表示速度の向上が見込める |
★★★
CloudFrontがページをキャッシュしていて、サイトアクセス時はCloudFrontのキャッシュを見ることになるため、表示速度の高速化が見込める。ただし、CloudFrontにキャッシュがない場合、EC2でWordPress(PHP)がページを生成する動きとなる(EC2単体と同様) |
★★★★
CloudFrontがページをキャッシュしていて、サイトアクセス時はCloudFrontのキャッシュを見ることになるため、表示速度の高速化が見込める。ただし、CloudFrontにキャッシュがない場合、EC上の静的ページにアクセスすることとなる(EC2単体ー静的ページ配信と同様) |
★★★★★
CloudFrontがページをキャッシュしていて、サイトアクセス時はCloudFrontのキャッシュを見ることになるため、表示速度の高速化が見込める。ただし、CloudFrontにキャッシュがない場合、S3上の静的ページにアクセスすることとなる |
捌けるアクセス量(大量アクセス時に安定したサイト表示が可能か) | ★
サイトアクセスの度にWordPress(PHP)がページを生成するため、サーバに負荷がかかりやすく捌けるアクセス量は少なくなる傾向 捌けるアクセス量を増やすにはサーバスペック(EC2のインスタンスタイプ)をあげる必要がある |
★★
静的ページ化しているため、サイトアクセス時はWordPress(PHP)は動かないため、サーバの負荷軽減が見込め、捌けるアクセス数も増加する |
★★★
CloudFrontを使っているため、基本的にはCloudFrontのキャッシュが使われ、EC2には負荷がかかりづらいので、捌けるアクセス数も増加する ただし、CloudFrontにキャッシュがない場合、EC2でWordPress(PHP)がページを生成するため、EC2へ負荷がかかるケースもある |
★★★★
CloudFrontを使っているため、基本的にはCloudFrontのキャッシュが使われ、EC2には負荷がかかりづらいので、捌けるアクセス数も増加する ただし、CloudFrontにキャッシュがない場合、EC2上の静的ページを返すため、EC2へ負荷がかかるケースもある |
★★★★★
CloudFrontとS3の構成となるため、基本的にどんなアクセス数にも耐えられる構成となっている |
セキュリティ | ★★★
WordPressサーバが公開されているため、一定のセキュリティリスクあり |
★★★
WordPressサーバが公開されているため、一定のセキュリティリスクあり |
★★★
WordPressサーバが公開されているため、一定のセキュリティリスクあり |
★★★
WordPressサーバが公開されているため、一定のセキュリティリスクあり |
★★★★★
CloudFrontとS3の構成となるため、WordPressサーバは一般公開する必要がなく、高いセキュリティを保つことができる |
動的機能(コメント・検索機能など)の対応 | 対応可 | 対応不可
静的ページのため、動的機能は使用不可 |
対応化 | 対応不可
静的ページのため、動的機能は使用不可 |
対応不可
静的ページのため、動的機能は使用不可 |
どのような場合に選択すべきか | とにかく簡単にWordPressを公開したい時 | できるだけ簡単に構築したいけど、速度向上や捌けるアクセス量を増やしたい時 | 速度向上しつつ、動的機能を利用したい時 | 速度向上や捌けるアクセス量を増やしたい時 | 速度向上や捌けるアクセス量に加え、セキュリティ面も考慮したい時 |
それぞれのWordPress構築方法について詳細を見ていきます。
EC2での構築方法は以下の記事をご参照ください
AWSマネージメントコンソール画面からの構築方法
Terraformを使った構築方法(Terraformを使い慣れている方向け)
EC2の代わりにLightsailで構築する場合
最もオーソドックスかつ、簡単な構築方法となります。
この構築方法のメリットとデメリットは以下のような点になります。
構築が簡単なため、とりあえずこの構築方法を選択し、速度改善や捌けるアクセス数を増やしたくなったら、別の構築方法へ移行するという進め方も良いかと思います。
EC2単体と同様の方法でEC2上にWordPressを構築します。
Lightsailを使用しても問題ありません。
WordPress構築後はStaticPressをインストールして、WordPressコンテンツの静的ページ化を行います。StaticPressの設定方法の詳細は「StaticPressのインストール方法」をご参照ください。
WordPressコンテンツを静的ページ化する方法となります。
この構築方法のメリットとデメリットは以下のような点になります。
できるだけ簡単にサイトの高速化と負荷対策(多くのアクセスを捌けるようにする)する際に、有効な手法となります。
EC2単体と同様の方法でEC2上にWordPressを構築します。
Lightsailを使用しても問題ありません。
WordPress構築後はCloudFront経由でEC2にアクセスするように設定します。
具体的な構築方法は以下のサイトを参考にさせてもらいましょ
WordPressプラグインClear CloudFront Cacheを入れておくと、CloudFrontのキャッシュを簡単に削除できるので便利です。設定方法の詳細は「Clear CloudFront Cache」をご参照ください。
WordPressコンテンツをCloudFrontでキャッシュする方法となります。
この構築方法のメリットとデメリットは以下のような点になります。
サイトの高速化と負荷対策(多くのアクセスを捌けるようにする)を図りつつ、動的機能をしようしたい場合に有効な手法となります。
EC2(Lightsailでも可)上にWordPress構築後に、StaticPressで静的ページ化し、静的ページをCloudFrontで配信します。
構築方法の詳細は以下の記事をご参照ください。
WordPressコンテンツを静的ページ化し、静的ページをCloudFrontでキャッシュする方法となります。
この構築方法のメリットとデメリットは以下のような点になります。
サイトの高速化と負荷対策(多くのアクセスを捌けるようにする)を図りたい場合に有効な手法となります。
EC2上にWordPress構築後に、StaticPressで静的ページ化し、静的ページをS3に転送し、CloudFrontで配信します。
構築方法の詳細は以下の記事をご参照ください。
WordPressコンテンツを静的ページ化し、静的ページをS3に転送し、S3の静的ページをCloudFrontでキャッシュする方法となります。
この構築方法のメリットとデメリットは以下のような点になります。
構築の難易度は最も高いが、サイトの高速化と負荷対策(多くのアクセスを捌けるようにする)を図れ、セキュリティにも優れている手法となります。
StaticPressのソース修正をします。
修正ソース:wp-content/plugins/staticpress/includes/class-static_press_admin.php
bitnamiを使用している場合のパス:/home/bitnami/stack/wordpress/wp-content/plugins/staticpress/includes/class-static_press_admin.php
// 以下のコードを追加する
「if( !($('li:last-child', ul).offset() === void 0) )」を追加する
修正後ソース 312行目辺り
if( !($('li:last-child', ul).offset() === void 0) )//追加
$('html,body').animate({scrollTop: $('li:last-child', ul).offset().top},'slow');
WordPressの設定->パーマリンク画面を開き、カスタム構造を選択し、「/%postname%.html」を入力する
AWS上にWordPressを構築する方法は5つのパターンがあり、それぞれ特徴やメリットとデメリットを見てきました。用途にあった方法で構築していきましょー
]]>WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようする!ということをやっていきます。
静的ページ化するところはWordPressのプラグインStaticPressを使用します。
CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します。
また、WordPressURLにBasic認証をかけるということもやっていきます!
WordPressのインストールは終わっている前提での記載になりますので、インストールが終わっていない場合は、以下の記事をご参照いただきEC2にWodPressをインストールください。
①WordPressコンテンツを静的ページ化
②静的ページ化をCloudFrontで配信
③WordPressURLにはBasic認証をかける
StaticPress
→静的ページ化で使用
Clear CloudFront Cache
→CloudFrontキャッシュの削除で使用
それでは、StaticPressを使用して、WordPressコンテンツの静的ページ化をしていきます!
以下の手順で静的ページ化します。手順に記載のパスはAMI「WordPress Certified by Bitnami and Automattic」を使用時の例ですので、環境に応じて読み替えてください
ssh -i “{sshキー}” bitnami@{パブリック IPv4 DNS}
/home/bitnami/stack/wordpress/wp-content/plugins/staticpress/includes/class-static_press_admin.php
// 以下のコードを追加する
「if( !($('li:last-child', ul).offset() === void 0) )」を追加する
修正後ソース 312行目辺り
if( !($('li:last-child', ul).offset() === void 0) )//追加
$('html,body').animate({scrollTop: $('li:last-child', ul).offset().top},'slow');
次に、Clear CloudFront Cacheプラグインをインストールして、CloudFrontのキャッシュを簡単にクリアできるようにしておきます!
Clear CloudFront Cacheは、WordPress管理画面からインストール可能です。
インストール方法の詳細は、以下の記事をご参照ください。
WordPressURLはBasic認証をかけましょ!
Basic認証をかけることで、以下のメリットがあります。
Basic認証のかけ方は以下記事をご参照ください
以上で「StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で配信」できるようになりましたー
]]>AWS上でWordPressコンテンツを静的ファイルにしてCloudFront+S3で配信したい方向けの記事です。
以下の記事ではStaticPress S3を使用していますが、「StaticPage S3 sync and CloudFront cache clear」を使うともっと簡単にCloudFront+S3で配信できるようになるよーという記事です。
まずはWordPressのインストールです。
以下の記事を参考に簡単にインストールできますので、インストール作業は以下の記事をみて進めてくださいー
プラグインを使用します。代表的なプラグインは以下の2つを紹介します。
この記事の本題は静的ファイル生成後のS3+CloudFrontでの配信についてですので、詳細は省略します。
//IAMポリシーの設定例 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "cloudfront:CreateInvalidation", "s3:ListBucket", "s3:PutObject" ], "Resource": "*" } ] }
WordPressのコンテンツを更新して、静的ページを生成後、S3+CloudFrontに反映したいタイミングで「StaticPage S3 sync and CloudFront cache clear」プラグインの「S3同期 & キャッシュクリア」ボタンを押下します。
これだけで、静的ファイルのS3への同期とCloudFrontのキャッシュクリアが実行され、最新のコンテンツが反映されます。
StaticPage S3 sync and CloudFront cache clear
以下の3つを入力して保存すれば準備完了。
S3のバケット名
静的ファイルの出力先ディレクトリパス
CloudFrontのディストリビューションID
あとは記事を公開・更新したいタイミングで「S3同期 & キャッシュクリア」ボタンを押下します。
WordPressのStaticPressの導入については以下の記事をご参照ください。
StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例
StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例
本題のStaticPress導入時にサイトマップ(sitemap.xml)を使えるようにする方法ですが、2つの対応をすることで可能となります。
StaticPressのソース修正
適切なサイトマップ作成プラグイン(Google XML Sitemaps)を入れる
サイトマップとは、検索エンジンにWebサイトのページ更新内容を知らせるため(インデックスさせるため)に必要なものです。SEO対策では必須になってきますので、この記事を参考に、ちゃんとサイトマップ出力されるように対策しちゃいましょ!
まずは、StaticPressのソース修正方法から記載していきます!
StaticPressのソース修正を行います。
修正ファイル:wp-content/plugins/staticpress/includes/class-static_press.php
377行目あたりを修正
// 修正前
switch ($file_type) {
case 'front_page':
case 'single':
case 'term_archive':
case 'author_archive':
case 'other_page':
// 修正後
switch ($file_type) {
case 'front_page':
case 'single':
case 'term_archive':
case 'author_archive':
case 'seo_files': // ここを追加
case 'other_page':
次にサイトマップ作成プラグインを入れます。
以下のプラグインをWordPressにインストールします。他のプラグインをいくつか試してみましたが、StaticPressとの相性が悪いようで正しく出力されないようでしたので、以下のプラグインがオススメです。
プラグイン:Google XML Sitemaps
動作確認をして問題なければ、Google search consoleにサイトマップをお知らせして終了です。
動作確認〜Google search consoleにサイトマップを送るまでの手順は以下の4ステップです。
サイトマップが正常に表示され、Google search consoleに送れたかと思います。
Google search consoleに送った後は、正常に処理されたかを確認しておきしょ!
正常に処理されたかの確認は、Google search console画面から可能です。
Google search consoleに正しく送れたら、Bingにも送っておきましょー
]]>WordPressのStaticPressの導入については以下の記事をご参照ください。
StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例
StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例
早速、解決方法を記載します!
この問題の解決にはStaticPressのソースコードを修正が必要となります。
以下のソースコード修正を行います。
修正ファイル:staticpress/includes/class-static_press.php
// 修正前ソース
if ( $home_url !== $static_url ) {
$pattern = array(
'# (href|src|action)="'.preg_quote($home_url).'([^"]*)"#ism',
"# (href|src|action)='".preg_quote($home_url)."([^']*)'#ism",
);
$content = preg_replace($pattern, ' $1="$2"', $content);
}
// 修正後ソース
if ( $home_url !== $static_url ) {
$pattern = array(
'# (href|src|action)="'.preg_quote($home_url).'([^"]*)"#ism',
"# (href|src|action)='".preg_quote($home_url)."([^']*)'#ism",
);
$content = preg_replace($pattern, ' $1="$2"', $content);
$content = preg_replace('/{WordPressのドメイン}/', '{静的ファイルドメイン}', $content); // ここを追加
}
上記修正を行います。「WordPressのドメイン」「静的ファイルドメイン」の部分はそれぞれ以下の値を設定してください。
WordPressのドメイン:WordPressの管理画面が動いているドメイン
静的ファイルドメイン:静的ファイルを配信しているサーバのドメイン
SNS拡散用ボタンのリンクURLなどは、URLエンコードされていることが原因で、静的ファイルURLの置換対象とならず、置換されない(WordPressの管理画面が動いているドメインのままとなる)ようです。
上記対応ではURLエンコードされているリンクURLも置換対象となるため、SSN拡散用ボタンのリンクURLも正常に動作するようになります。
簡単なソース修正で、URLが置き換わるようになったと思います。
今回、URLを書き換える処理を追加したことで、StaticPressの再構築の処理が少し遅くなりそうですが、許容範囲かと思います。
]]>Clear CloudFront CacheはWordPressのプラグインです。
StaticPress S3で、CloudFront+S3でWordPressコンテンツ配信している際に、CloudFrontのキャッシュを簡単に削除できる便利プラグインです。
StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例
StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例
なぜCloudFrontのキャッシュを消す必要があるの?という方は以下の記事をご参照ください。
WordPressのプラグインです
CloudFront+S3でWordPressコンテンツ配信している際に使えます
CloudFrontのキャッシュを簡単に削除できる便利プラグインです
WordPressプラグインのStaticPress S3と一緒に使えます(共存できます)
ざっくりプラグインの紹介が終わったので、インストール方法について記載していきます!
以下の2つの方法がありますので、それぞれご紹介します。
WordPressのプラグイン追加画面から検索してインストール
Githubからダウンロードしてインストール
WordPress管理画面からClear CloudFront Cacheをインストールする方法を記載します。
// IAM設定例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudfront:CreateInvalidation",
"Resource": "*"
}
]
}
Githubからダウンロードして、Clear CloudFront Cacheをインストールする方法を記載します。
//IAM 設定例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudfront:CreateInvalidation",
"Resource": "*"
}
]
}
次に、Clear CloudFront Cacheの使い方について、記載します。
CloudFrontのキャッシュを削除したいタイミングで、プラグインの「キャッシュクリア」ボタンを押下するだけで、CloudFrontのキャッシュが消えてくれます。
以下、Clear CloudFront Cacheの画面です。
Clear CloudFront Cache
CloudFrontのディストリビューションIDを入力して保存すれば準備完了。
あとはキャッシュ削除が必要な時にキャッシュクリアボタンを押すだけで、CloudFrontのキャッシュを削除できます。
次に、Clear CloudFront Cacheの特徴について、記載します。
Clear CloudFront Cacheの特徴は以下の通りです。
WordPressプラグイン「Clear CloudFront Cache」を紹介させていただきました!
CloudFrontのキャッシュを削除してくれる便利なWordPressプラグイン
簡単な設定と操作でCloudFrontのキャッシュが削除できる
アクセスキーを使わないので、とってもセキュアです
WordPressのStaticPress S3の導入については以下の記事をご参照ください。
本記事は上記の構築をした後など、StaticPress S3プラグインを使ってS3+CloudFrontでWordPressコンテンツ配信時に、固定記事などが表示されない場合の対処法を記載します。
固定記事は
{固定記事名}/index.html
上記の形式でS3に転送されます。
しかし、固定記事のリンクURLは
{固定記事名}/
となります。
「index.html」がリンクURLにないため表示されないため、
S3上でファイルが見つからず403エラーとなっています。
StaticPressのPHPプログラムを修正する方法もありますが、今回は、CloudFrontの関数を使用して、URLの書き換えを行います。
せっかくCloudFrontで配信してるのだから、CloudFrontの便利機能を使っちゃおうという考えです。
AWSコンソール画面からCloudFrontの関数の作成をします。
以下のように、AWSマネージメントコンソール画面を操作し、CloudFrontの関数作成画面にいきます。
CloudFont->関数->関数を作成
以下の設定でCloudFrontの関数を作成します。
function handler(event) {
var request = event.request
var uri = request.uri;
if (uri.endsWith('/')) {
request.uri += 'index.html';
} else if (!uri.includes('.')) {
request.uri += '/index.html';
}
return request;
}
関数を保存後に、発行タブから「関数を発行」ボタンを押します。
関数を発行後に、発行タブにある「関連付けを追加」ボタンを押下します。
ディストリビューション:CloudFrontのディストリビューションを指定
イベントタイプ:Viewer Request
キャッシュビヘイビア:環境にあったものを選択(特別な設定をしていなければ、Defaultを選択)
上記設定後に「関連付けを追加」ボタンを押下して、実際に関数とCloudFrontの紐付けを行います。
固定記事等の403エラーが発生していたリンクを押下し、ページが表示されればOKです。
StaticPress使用時の403エラーが簡単に解決できたとおもいます。
CloudFrontの関数、便利ですね。
CloudFrontの関数については以下の記事も参考になるかと思いますので、よろしければご覧ください。
AWS S3 + CloudFrontでhtaccessのような「URL書き換え」や「Basic認証」をする方法
CloudFront関数の公式記事も載せておきます!!
WordPressのStaticPressの導入については以下の記事をご参照ください!
StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例
StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例
本記事はStaticPressを導入後に、不要な静的ファイルが出力されないようにする方法を記載します。
不要な静的ファイルとは配信サーバに不要なページであるWordPressの管理画面などのHTMLを指します。
不要なファイルを生成されないようにすることで、以下のメリットがあります。
ディスク容量の削減
StaticPressでの再構築時間の短縮
配信サーバに不要なページについて、具体的には以下のフォルダを不要と考えています。
改めて、不要なページを出力しないようにする理由について、記載していきます。
配信に不要なページについて、静的HTMLを出力しないようにすることで、以下のメリットがあります。
<WordPressサーバ(EC2)からみたメリット>
メリット1:EC2ディスク容量の節約できる
メリット2:再構築(HTML生成)時間の短縮
<配信サーバ(S3)からみたメリット>
※WordPressサーバ(EC2)で配信している場合は対象外です。配信サーバにS3を使用している場合、以下のようになります。
WordPressサーバで不要なページについては静的ファイル(HTMLファイル)の生成対象外となるため、StaticPress S3でS3に同期(コピー)対象から不要なページが含まれないようになります。これにより以下のメリットがあります
メリット1:S3 APIの節約に役立ちます
メリット2:S3 ストレージの節約に役立ちます
それでは、不要な静的ファイルが生成されないようにする方法を記載します。
生成対象外とする対象のフォルダによって対応方法が異なります。
まずは、wp-admin、wp-includesフォルダを除外する方法を記載します。
修正対象ソース:/wp-content/plugins/staticpress/includes/class-static_press.php
869行目辺りを以下のように修正する
//修正後ソース
//869行目辺り
private function static_files_url($url_type = 'static_file'){
$urls = array();
$static_files_filter = apply_filters('StaticPress::static_files_filter', $this->static_files_ext);
foreach ($static_files_filter as &$file_ext) {
$file_ext = '*.'.$file_ext;
}
$static_files = array_merge(
$this->scan_file(trailingslashit(ABSPATH), '{'.implode(',',$static_files_filter).'}', false),
//$this->scan_file(trailingslashit(ABSPATH).'wp-admin/', '{'.implode(',',$static_files_filter).'}', true),←コメントアウト
//$this->scan_file(trailingslashit(ABSPATH).'wp-includes/', '{'.implode(',',$static_files_filter).'}', true),←コメントアウト
$this->scan_file(trailingslashit(WP_CONTENT_DIR), '{'.implode(',',$static_files_filter).'}', true)
);
次に、以下の静的ファイルを生成されないように対応します。
・/wp-content/plugins/*
・/wp-json/*
・/author/*
修正対象ソース:/wp-content/plugins/staticpress/plugin.php
//以下のソースを追加
add_action('StaticPress::file_put', 'static_rm', 1, 2);
function static_rm($file_dest, $url){
if(strstr($file_dest, '/author/')
or strstr($file_dest, '/wp-content/plugins/')
or strstr($file_dest, '/wp-json/')){
unlink($file_dest);
}
}
以下の対応をした後にStaticPressで再構築をします。
WordPressサーバの静的ファイル出力フォルダをカラにする
(S3を使用している場合)S3にコピーされたファイルを全て削除する
StaticPressで再構築後に以下の確認ができればOKです。
WordPressサーバの静的ファイル出力フォルダにファイルが出力されている
配信用URLにアクセスし、サイトが正常に表示される