StaticPress | さゆフィクション http://it.kensan.net/it aws wordpress などなどゆるーく書いてます Fri, 28 Apr 2023 14:10:31 +0000 ja hourly 1 https://wordpress.org/?v=6.5.2 https://it.kensan.net/wp-content/uploads/2023/03/cropped-icon-32x32.png StaticPress | さゆフィクション http://it.kensan.net/it 32 32 WordPressコンテンツを静的ファイル化してAWS上でサーバレス配信してみる https://it.kensan.net/wordpress-serverless.html Sun, 02 Apr 2023 08:04:17 +0000 http://3.113.9.194/it/?p=1087 今回はWordPressコンテンツをサーバレス配信してみます。結構簡単で、30分ほどあればサーバレス配信できるところまで確認できるかと思いまーす。

この記事でのサーバレスとはS3+CloudFrontでコンテンツ配信をすることを指しています。

サーバーレスにすることで以下のようなメリットがあります。

    • 低コストで安定したサイト運用ができる
      • 急なアクセス増にも耐えられ、かつ、安価です
    • 高速なサイトを構築できる
      • サイトの速度向上はSEO的にも有利です
    • 訪問者がWordPressに直接アクセスしないのでセキュアになります
      • WordPressのセキュリティリスクについては以下の記事をご参照ください
    WordPressのセキュリティリスクとセキュリティ対策
    WordPressはセキュリティ対策を取らないとリスクが高いと思っています。 セキュリティ対策としてはセキュリティプラグインの導入などがあると思いますが、一番安全なのはStaticPress S3を使用してコンテンツをS3+CloudFrontで配信し、WordPressが動いているサーバを隠してしまう対策です。

     

    では、構築手順を記載していきます。

    まずゴールイメージです。以下のような構成となります。サイト閲覧者はCloudFront経由でS3に格納されたコンテンツ(WordPressコンテンツを静的HTMLにしたもの)にアクセスすることになります。

    使うもの

    使用するAWSサービスとWordPressプラグインについて記載します。

    AWSサービス

    • EC2
      • WordPressをインストールする(DB内包)
    • S3
      • Word Pressを静的コンテンツ化したHTMLを格納する
    • CloudFront
      • S3のHTMLをCloud Front経由で配信する

    Word Pressプラグイン

    • StaticPress2019
      • Static Pressを使用してWord PressコンテンツをHTML化する
    • StaticPage S3 sync and CloudFront cache clear
      • HTML化したファイルをS3に転送すると同時にCloudFrontのキャッシュを削除する

    では、早速構築をしていきます。

    まずはS3の作成から始めていきます。

    S3バケット作成

    任意のバケット名でS3バケットを作成します。

    CloudFrontの作成と設定

    まず、ディストリビューションを作成し、オリジンの編集からS3に設定するポリシーを取得という流れになります。

    CloudFrontとS3間はOACで設定を行います。

    OACについて分からなくても以下の通り進めれば大丈夫です。

    1. ディストリビューションの作成
      1. AWSコンソール画面からCloudFrontダッシュボードへ行きます
      2. 「ディストリビューションを作成」ボタンを押下します
      3. 以下の設定でディストリビューションを作成します
        • オリジンドメイン:作成したS3バケットを選択
        • S3 バケットアクセス:「Origin access control settings (recommended)」を選択
        • コントローラ設定を作成ボタンを押下して、Create control setting画面が表示されるので設定変更せずに(デフォルト設定のまま)作成ボタン押下
    2. S3に設定するポリシーを取得
      1. 作成したディストリビューションのオリジンタブから、S3のオリジンを選択して、編集ボタン押下
      2. オリジン編集画面から「ポリシーをコピー」ボタンを押下して、ポリシーをクリップボードにコピーする
      3. 変更を保存ボタンを押下する
    CloudFront+S3でOACを使う

    CloudFront+S3でOACを使う

    次に、CloudFrontの設定画面(以下の画面)から設定ボタンを押下して、デフォルトルートオブジェクトに「index.html」を設定します。

    CloudFront設定

    CloudFront設定

    S3のアクセス許可設定

    以下の手順でS3の設定を行います

    1. バケットのアクセス許可タブを開く
    2. バケットポリシーの編集ボタンを押下
    3. CloudFront設定時にコピーしたポリシーを貼り付ける
    4. 変更の保存ボタンを押下

     

    EC2設定

    WordPressインストール方法

    EC2へWordPressをインストール

    1. AWSコンソールのEC2ダッシュボードからインスタンスを起動を選択
    2. インスタンス起動画面で以下の設定をする
      • 名前:wordpress(他の名前でも大丈夫)
      • アプリケーションおよび OS イメージ (Amazon マシンイメージ):WordPress Certified by Bitnami and Automattic
      • インスタンスタイプ:t3.a.small(もっとスペック高いものを選択しても大丈夫)
      • キーペア (ログイン):任意の名前で作成または既存キーを選択
      • ファイアウォール (セキュリティグループ):
        • 「セキュリティグループを作成する」を選択し、「インターネットからの HTTP トラフィックを許可」からの SSH トラフィックを許可するのチェックボックスのみチェックする(他は外す)
      • インスタンスを起動ボタンを押下
      EC2起動時のインスタンス設定

      EC2起動時のインスタンス設定

      WordPress管理者アカウントのパスワード確認

      1. EC2インスタンス一覧画面から作成したWordPressインスタンスを選択
      2. 以下の通りメニューをたどり、システムログを開く
        • アクション->モニタリングとトラブルシューティング->システムログを取得
      3. システムログを「Setting Bitnami application password to」で検索し、WordPress管理者のパスワードを調べる
      WordPress EC2システムログ

      WordPress EC2システムログ

      動作確認

      1. EC2インスタンス詳細画面を開き、「http://パブリック IPv4 アドレス/wp-admin」をブラウザのアドレスバーに入力する(httpsだとアクセスできないので注意)
      2. WordPressログイン画面が表示されるのでユーザ名は「user」、パスワードはシステムログで調べたパスワードを入力し、ログインできれば完了
      EC2インスタンス詳細

      EC2インスタンス詳細

      EC2インスタンスにSSH接続する方法

      以下のようなコマンドで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": "*"
              }
          ]
      }
      

      Word Pressのパーマリンク設定の変更

      WordPressの設定->パーマリンク画面を開き、カスタム構造を選択し、「/%postname%.html」を入力する

      WordPressのプラグインStaticPress2019の設定

      1. WordPress 管理パネルから、「プラグイン」 -> 「新規追加」をクリックします。
      2. ブラウザの入力ボックスに「StaticPress2019」と入力します。
      3. 「StaticPress2019」プラグインを選択し、「インストール」をクリックします。
      4. プラグインを有効にします。
      5. メニューの「StaticPress2019 Options」をクリックする
      6. 「StaticPress2019 Options」の「Save Dir」に静的ファイルを出力するディレクトリを指定。
      7. 「StaticPress2019 Options」の「Static URL」にCloudFrontのディストリビューションドメイン名を設定
      8. 「Save Changes」ボタン押下
      staticpress2019設定

      staticpress2019設定

      WordPressのプラグイン「StaticPage S3 sync and CloudFront cache clear」の設定

      インストール

      1. Githubからプラグインをダウンロードします。
      2. zip ファイルをコンピューター上の場所に保存します。
      3. WordPress 管理パネルを開き、[プラグイン] -> [新規追加] をクリックします。
      4. [アップロード] をクリックし、このページからダウンロードした .zip ファイルを参照します。
      5. [インストール] をクリックし、[プラグインを有効にする] をクリックします。
      6. 以下3点をStaticPage S3 sync and CloudFront cache clearプラグインに設定します。
        • S3のバケット名
        • StaticPress2019の静的ファイルの出力先ディレクトリパス(Save Dir)
        • CloudFrontのディストリビューションID

      動作確認

      1. StaticPress2019で「再構築」ボタン押下
      2. StaticPage S3 sync and CloudFront cache clearで「S3同期 & キャッシュクリア」ボタン押下
      3. CloudFrontのディストリビューションドメインにブラウザでアクセスし、コンテンツが閲覧できればOKです。

      まとめ

      WordPressコンテンツのサーバレス配信について記載しました。

      • ソース修正
      • sshしてサーバにログイン

      など難しい作業をせずにWordPressコンテンツのサーバレス配信できました。

      結構簡単かと思いますので、気になる方は是非★

      ]]>
      WordPressをAWSで構築する5つの方法ー構築方法毎の使用するAWSサービスやWordPressプラグイン情報など https://it.kensan.net/use-case-wordpress-aws.html Sat, 25 Mar 2023 00:31:18 +0000 http://3.113.9.194/it/?p=1021 WordPressをAWS上に構築する方法について記載します。

      AWS上に構築する方法は5つのパターンがあり、それぞれ特徴やメリットとデメリットがありますので、この点について記載していきます。

      構築パターンの特徴を知って適切な構築方法を選択しよう!という記事です。

      まずはどのような構築方法があるかについて記載していきます。

      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構築方法毎の比較情報

      次に、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構築方法毎の詳細情報

      それぞれのWordPress構築方法について詳細を見ていきます。

      EC2単体

      • 使用するAWSサービス
        • EC2
      • 使用するWordPressプラグイン
        • なし

      構築方法

      EC2での構築方法は以下の記事をご参照ください

      AWSマネージメントコンソール画面からの構築方法

      AWSのEC2に簡単にWordPressをインストールする方法(AMIでWordPressを使用)
      簡単にAWSのEC2にWordPressをインストールする方法です。5分で動作確認までできます。 ハマるポイントとしては、WordPressログイン時のパスワードの確認くらいです。 AMIはWordPress Certified by Bitnami and Automatticを使用します

      Terraformを使った構築方法(Terraformを使い慣れている方向け)

      TerraformでEC2上にWordPressを簡単に構築するーコピペでTerraformでWordPress構築
      TerrafromでEC2上にWordPressを構築します。コピペで簡単にTerraformでEC2上にWordPressを構築できるように記載しています。TerraformソースコードとTerrafromの実行方法、最後に作成したリソースの削除方法を記載しています。

      EC2の代わりにLightsailで構築する場合

      Amazon LightsailでWordPressを構築してみて、EC2との違いについて考えてみた
      LightsailでWordPressを構築してみました。 結論としてはEC2と比べて構築作業の難易度はそれほど変わらない印象です。 どちらも簡単。 普段EC2に慣れている人はEC2の方が楽かもしれません。 逆にEC2を触ったことがなければ、Lightsailの方が直感的に作業できて楽かもしれません。

      特徴

      最もオーソドックスかつ、簡単な構築方法となります。

      この構築方法のメリットとデメリットは以下のような点になります。

      • メリット
        • とにかく簡単に構築できる
      • デメリット
        • 捌けるアクセル量が少ない(アクセスが多いとサーバダウンなどが懸念される)
        • WordPress(PHP)がコンテンツを生成するため、サイトアクセス時の表示速度が他の方法と比べると遅い

      構築が簡単なため、とりあえずこの構築方法を選択し、速度改善や捌けるアクセス数を増やしたくなったら、別の構築方法へ移行するという進め方も良いかと思います。

      EC2単体ー静的ページ配信

      • 使用するAWSサービス
        • EC2
      • 使用するWordPressプラグイン

      構築方法

      EC2単体と同様の方法でEC2上にWordPressを構築します。

      Lightsailを使用しても問題ありません。

      WordPress構築後はStaticPressをインストールして、WordPressコンテンツの静的ページ化を行います。StaticPressの設定方法の詳細は「StaticPressのインストール方法」をご参照ください。

      特徴

      WordPressコンテンツを静的ページ化する方法となります。

      この構築方法のメリットとデメリットは以下のような点になります。

      • メリット
        • サイトの高速化と捌けるアクセス数を増やすことができる
      • デメリット
        • StaticPress導入にあたり、PHPのソース修正が発生し、EC2単体の構築方法より難易度が若干高め
        • 動的機能(検索やコメントなど)が使用できない

      できるだけ簡単にサイトの高速化と負荷対策(多くのアクセスを捌けるようにする)する際に、有効な手法となります。

      EC2+CloudFront配信

      構築方法

      EC2単体と同様の方法でEC2上にWordPressを構築します。

      Lightsailを使用しても問題ありません。

      WordPress構築後はCloudFront経由でEC2にアクセスするように設定します。

      具体的な構築方法は以下のサイトを参考にさせてもらいましょ

      AWSに構築したWordPressをCloudFrontを使ってキャッシュして高速化【CDN】
      WordPressを高速化!AWSのCloudFrontを配置し、静的コンテンツをキャッシュして配信する環境構築の手順を紹介しています。 CloudFrontによりキャッシュされているか確認する方法、CloudFrontのキャッシュ削除方法、CloudFrontからしかアクセスを受け付けない、つまりEC2に直接アクセス...

      WordPressプラグインClear CloudFront Cacheを入れておくと、CloudFrontのキャッシュを簡単に削除できるので便利です。設定方法の詳細は「Clear CloudFront Cache」をご参照ください。

      特徴

      WordPressコンテンツをCloudFrontでキャッシュする方法となります。

      この構築方法のメリットとデメリットは以下のような点になります。

      • メリット
        • サイトの高速化と捌けるアクセス数を増やすことができる
        • 高速化を図りつつ動的機能(検索やコメントなど)を利用できる
      • デメリット
        • CloudFrontの設定で、キャッシュするページとキャッシュしないページを分けて設定する必要があり、難易度が高め

      サイトの高速化と負荷対策(多くのアクセスを捌けるようにする)を図りつつ、動的機能をしようしたい場合に有効な手法となります。

      EC2ー静的ページ+CloudFront配信

      構築方法

      EC2(Lightsailでも可)上にWordPress構築後に、StaticPressで静的ページ化し、静的ページをCloudFrontで配信します。

      構築方法の詳細は以下の記事をご参照ください。

      StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
      WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

      特徴

      WordPressコンテンツを静的ページ化し、静的ページをCloudFrontでキャッシュする方法となります。

      この構築方法のメリットとデメリットは以下のような点になります。

      • メリット
        • サイトの高速化と捌けるアクセス数を増やすことができる
      • デメリット
        • CloudFrontの設定が必要であり、CloudFrontを使ったことがない場合、難易度が高め
        • StaticPress導入にあたり、PHPのソース修正が発生し、EC2単体の構築方法より難易度が若干高め
        • 動的機能(検索やコメント)が使用できない

      サイトの高速化と負荷対策(多くのアクセスを捌けるようにする)を図りたい場合に有効な手法となります。

      EC2ー静的ページ+S3+CloudFront配信

      構築方法

      EC2上にWordPress構築後に、StaticPressで静的ページ化し、静的ページをS3に転送し、CloudFrontで配信します。

      構築方法の詳細は以下の記事をご参照ください。

      【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
      WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

      特徴

      WordPressコンテンツを静的ページ化し、静的ページをS3に転送し、S3の静的ページをCloudFrontでキャッシュする方法となります。

      この構築方法のメリットとデメリットは以下のような点になります。

      • メリット
      • デメリット
        • CloudFrontの設定が必要であり、CloudFrontを使ったことがない場合、難易度が高め
        • StaticPress導入にあたり、PHPのソース修正が発生し、EC2単体の構築方法より難易度が若干高め
        • 動的機能(検索やコメント)が使用できない

      構築の難易度は最も高いが、サイトの高速化と負荷対策(多くのアクセスを捌けるようにする)を図れ、セキュリティにも優れている手法となります。

      StaticPressのインストール方法

      インストール

      1. WordPress 管理パネルから、「プラグイン」 -> 「新規追加」をクリックします。
      2. ブラウザの入力ボックスに「StaticPress」と入力します。
      3. 「StaticPress」プラグインを選択し、「インストール」をクリックします。
      4. プラグインを有効にします。

      ソース修正

      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');

      Word Pressのパーマリンク設定の変更

      WordPressの設定->パーマリンク画面を開き、カスタム構造を選択し、「/%postname%.html」を入力する

       

      まとめ

      AWS上にWordPressを構築する方法は5つのパターンがあり、それぞれ特徴やメリットとデメリットを見てきました。用途にあった方法で構築していきましょー

      ]]>
      StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法 https://it.kensan.net/aws_ec2_wordpress_cloudfront.html Fri, 17 Feb 2023 21:46:32 +0000 http://3.113.9.194/it/?p=454

      WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようする!ということをやっていきます。

      静的ページ化するところはWordPressのプラグインStaticPressを使用します。

      CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します。

      また、WordPressURLにBasic認証をかけるということもやっていきます!

      WordPressのインストールは終わっている前提での記載になりますので、インストールが終わっていない場合は、以下の記事をご参照いただきEC2にWodPressをインストールください。

      AWSのEC2に簡単にWordPressをインストールする方法(AMIでWordPressを使用)
      簡単にAWSのEC2にWordPressをインストールする方法です。5分で動作確認までできます。 ハマるポイントとしては、WordPressログイン時のパスワードの確認くらいです。 AMIはWordPress Certified by Bitnami and Automatticを使用します
      やること

      ①WordPressコンテンツを静的ページ化
      ②静的ページ化をCloudFrontで配信
      ③WordPressURLにはBasic認証をかける

      使用するプラグイン

      StaticPress
      →静的ページ化で使用
      Clear CloudFront Cache
      →CloudFrontキャッシュの削除で使用

      それでは、StaticPressを使用して、WordPressコンテンツの静的ページ化をしていきます!

      StaticPressを使用してWordPressコンテンツを静的ページ化する

      以下の手順で静的ページ化します。手順に記載のパスはAMI「WordPress Certified by Bitnami and Automattic」を使用時の例ですので、環境に応じて読み替えてください

      1. 以下のコマンドのようにWordPressが動いているEC2にSSH接続します
        • ssh -i “{sshキー}” bitnami@{パブリック IPv4 DNS}

      2. WordPress管理画面からStaticPressプラグインをインストールして、有効化します
      3. StaticPressの設定を以下の通り行います
        • サイトURL:http://{パブリック IPv4 アドレス}/static/
        • ドキュメントルート:/opt/bitnami/wordpress/
      4. StaticPressプラグインの再構築ボタンを押下し、静的ファイルを生成します
        • フェッチが進まない場合はソース修正をします
          • /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');
        • ファイルが生成されずに終了する場合はドキュメントルートの権限を確認します
          • 権限がなければ付与します
            • 「chown -R daemon:daemon /opt/bitnami/wordpress」を実行すると、権限に問題がある場合は問題解消できます
      5. 以下のURLにアクセスし画面表示されればOKです。
        • http://{パブリック IPv4 アドレス}/static/

      CloudFrontの設定

      1. ディストリビューションを以下の設定で新規作成します(他の項目は変更しなくて大丈夫)
        • オリジンドメイン:EC2のパブリック IPv4 DNS
        • オリジンパス :static
      2. 以下のURLにアクセスし画面表示されればOK
        • http://ディストリビューションドメイン名
          • httpsでも大丈夫

      次に、Clear CloudFront Cacheプラグインをインストールして、CloudFrontのキャッシュを簡単にクリアできるようにしておきます!

      Clear CloudFront Cacheプラグインをインストールする

      Clear CloudFront Cacheは、WordPress管理画面からインストール可能です。

      インストール方法の詳細は、以下の記事をご参照ください。

      StaticPress S3と共存できるWordPressプラグインClear CloudFront Cacheを公開!
      StaticPress S3と共存できるWordPressプラグイン「Clear CloudFront Cache」を公開! WordPressコンテンツをCloudFront経由で配信している場合に使えるプラグイン。公開したプラグイン「Clear CloudFront Cache」はWP管理画面からインストール可能

      WordPressURLにBasic認証をかける

      WordPressURLはBasic認証をかけましょ!

      Basic認証をかけることで、以下のメリットがあります。

      メリット
      • WordPress管理画面へのアクセスにはBasic認証が必要
        • セキュリティ向上
      • 「WordPressを静的ファイル化して配信するURL」と「WordPressのURL」で、同一の記事が配信されていると、Google等のクローラーにみなされないようにする
        • SEO対策になる

       

      Basic認証のかけ方は以下記事をご参照ください

      WordPressのプラグインStaticPressでBasic認証を使う
      StaticPress利用時のBasic認証のかけ方について記載。StaticPressで静的HTMLを生成して、StaticPress S3で静的ファイルをS3に転送して、配信する場合、Basic認証をかけることをお勧めします。Basic認証をかけるにはStaticPressのソース修正も必要となります

      以上で「StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で配信」できるようになりましたー

      ]]>
      WordPressプラグインStaticPage S3 sync CloudFront cache clear利用方法 https://it.kensan.net/static-s3-sync-cloudfront-cache-clear.html Fri, 17 Feb 2023 13:00:17 +0000 http://3.113.9.194/it/?p=446 WordPressのプラグイン「StaticPage S3 sync and CloudFront cache clear」でStaticPressなどを使用して生成した静的ファイルをCloudFront+S3で配信する方法を記載します。

      AWS上でWordPressコンテンツを静的ファイルにしてCloudFront+S3で配信したい方向けの記事です。

      以下の記事ではStaticPress S3を使用していますが、「StaticPage S3 sync and CloudFront cache clear」を使うともっと簡単にCloudFront+S3で配信できるようになるよーという記事です。

      【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
      WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

      WordPressをインストールする

      まずはWordPressのインストールです。

      以下の記事を参考に簡単にインストールできますので、インストール作業は以下の記事をみて進めてくださいー

      AWSのEC2に簡単にWordPressをインストールする方法(AMIでWordPressを使用)
      簡単にAWSのEC2にWordPressをインストールする方法です。5分で動作確認までできます。 ハマるポイントとしては、WordPressログイン時のパスワードの確認くらいです。 AMIはWordPress Certified by Bitnami and Automatticを使用します

      WordPressコンテンツを静的ファイルにする方法

      プラグインを使用します。代表的なプラグインは以下の2つを紹介します。

      この記事の本題は静的ファイル生成後のS3+CloudFrontでの配信についてですので、詳細は省略します。

      • Simply Static
        • 詳細は以下のサイトを参考にさせてもらうといいです。
      ワードプレスで静的HTMLを出力するプラグイン「Simply Static」
      ワードプレスで静的HTMLを出力するプラグイン「Simply Static」を試してみました。機能が限定的で設定も少なく使いやすいです。
      • StaticPress
        • こちらは以下のサイトを参考にさせてもらいましょう
      WordPressを静的なサイトに変換するプラグイン「StaticPress」
      今回はWordPressプラグイン「StaticPress」のご紹介です。WPで組んだサイトを静的なサイトに簡単に変換することができます。クライアントの意向により使用できない場面や使用するサーバーによってはPHPバージョンが対応していない場合などに便利です。

      CloudFront+S3に静的ファイルを配信する

      StaticPage S3 sync and CloudFront cache clearを使うにあたって、WordPressが動作しているサーバにAWS CLIがインストールされている必要があります。
      AWS CLIがインストールされていない場合はインストールします。

      StaticPage S3 sync and CloudFront cache clear」のインストール方法

      1. Githubからプラグインをダウンロードします。
      2. zip ファイルをコンピューター上の場所に保存します。
      3. WordPress 管理パネルを開き、[プラグイン] -> [新規追加] をクリックします。
      4. [アップロード] をクリックし、このページからダウンロードした .zip ファイルを参照します。
      5. [インストール] をクリックし、[プラグインを有効にする] をクリックします。
      6. 以下3点をStaticPage S3 sync and CloudFront cache clearプラグインに設定します。
        • S3のバケット名
        • 静的ファイルの出力先ディレクトリパス
        • CloudFrontのディストリビューションID
      7. WordPressが動いているEC2に以下の権限を追加します。
      //IAMポリシーの設定例
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "cloudfront:CreateInvalidation",
                      "s3:ListBucket",
                      "s3:PutObject"
                  ],
                  "Resource": "*"
              }
          ]
      }
      
      

      StaticPage S3 sync and CloudFront cache clear」の使い方

      WordPressのコンテンツを更新して、静的ページを生成後、S3+CloudFrontに反映したいタイミングで「StaticPage S3 sync and CloudFront cache clear」プラグインの「S3同期 & キャッシュクリア」ボタンを押下します。

      これだけで、静的ファイルのS3への同期とCloudFrontのキャッシュクリアが実行され、最新のコンテンツが反映されます。

      StaticPage S3 sync and CloudFront cache clear」の画面イメージ

      StaticPage S3 sync and CloudFront cache clear

      StaticPage S3 sync and CloudFront cache clear

      以下の3つを入力して保存すれば準備完了。

      設定項目

      S3のバケット名
      静的ファイルの出力先ディレクトリパス
      CloudFrontのディストリビューションID

      あとは記事を公開・更新したいタイミングで「S3同期 & キャッシュクリア」ボタンを押下します。

      StaticPage S3 sync and CloudFront cache clear」を使うメリット

      • 入力項目は3つのみで設定が簡単
        • S3バケット名
        • 静的ファイルの出力先ディレクトリパス
        • CloudFrontのディストリビューションID
      • 操作が簡単
        • 記事を公開・更新したいタイミングで「S3同期 & キャッシュクリア」ボタンを押すだけ
      • 権限はEC2のロールに付与する
        • 「アクセスキー」「シークレットキー」が不要なのでとってもセキュア
        • EC2に付与する必要があるポリシーも最低限でいいので安心
      ]]>
      WordPressのStaticPressでサイトマップ(sitemap.xml)が出力されない時の対応方法 https://it.kensan.net/wordpress_staticpress_sitemap-xm.html Mon, 13 Feb 2023 23:57:02 +0000 http://ec2-13-112-80-120.ap-northeast-1.compute.amazonaws.com/it/?p=314 WordPressのプラグインStaticPressで使用時に、サイトマップ(sitemap.xml)が出力されない時の対応方法を記載します。

      WordPressのStaticPressの導入については以下の記事をご参照ください。

      StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例

      【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
      WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

      StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例

      StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
      WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

      本題のStaticPress導入時にサイトマップ(sitemap.xml)を使えるようにする方法ですが、2つの対応をすることで可能となります。

      対応方法

      StaticPressのソース修正
      適切なサイトマップ作成プラグイン(Google XML Sitemaps)を入れる

        サイトマップとは、検索エンジンにWebサイトのページ更新内容を知らせるため(インデックスさせるため)に必要なものです。SEO対策では必須になってきますので、この記事を参考に、ちゃんとサイトマップ出力されるように対策しちゃいましょ!

        まずは、StaticPressのソース修正方法から記載していきます!

        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ステップです。

        1. 「{サイトアドレス (URL)}/sitemap.xml」にアクセスしてサイトマップが正しく表示されることを確認
        2. StaticPressで再構築する
        3. 「{静的サイト URL}/sitemap.xml」にアクセスして、サイトマップ表示を確認する
        4. Google search consoleに以下のURLでサイトマップを送ります
          • 「{静的サイト URL}/sitemap.xml」

        まとめ

        サイトマップが正常に表示され、Google search consoleに送れたかと思います。

        Google search consoleに送った後は、正常に処理されたかを確認しておきしょ!

        正常に処理されたかの確認は、Google search console画面から可能です。

        Google search consoleに正しく送れたら、Bingにも送っておきましょー

        ]]>
        StaticPressでドメインが静的サイト URLに置換されない時の対処法(WordPress) https://it.kensan.net/wordpress_staticpress_domain_convers.html Sun, 12 Feb 2023 04:08:43 +0000 http://3.113.9.194/it/?p=351 以下のような悩みを抱えた方向けの記事です。

        • WordPressのプラグインStaticPressを使用している
          • StaticPressで生成された静的ファイルのリンクURLが、StaticPressで設定した「静的サイト URL」に置き換わらないことがある
            • SNS拡散用ボタンのリンクURLが「静的サイトURL」に置き換わらないなど

        WordPressのStaticPressの導入については以下の記事をご参照ください。

        StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例

        【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
        WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

        StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例

        StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
        WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

        早速、解決方法を記載します!

        解決方法

        この問題の解決には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の再構築の処理が少し遅くなりそうですが、許容範囲かと思います。

        ]]>
        StaticPress S3と共存できるWordPressプラグインClear CloudFront Cacheを公開! https://it.kensan.net/cloudfront-cache-clear.html Sat, 11 Feb 2023 07:55:34 +0000 http://ec2-13-112-80-120.ap-northeast-1.compute.amazonaws.com/it/?p=310 StaticPress S3と一緒につかえるプラグイン「Clear CloudFront Cache」を作りましたので紹介させて頂きます。

        Clear CloudFront CacheはWordPressのプラグインです。

        StaticPress S3で、CloudFront+S3でWordPressコンテンツ配信している際に、CloudFrontのキャッシュを簡単に削除できる便利プラグインです。

        どんな時に使えるプラグインか

        • WordPressコンテンツをCloudFront経由で配信している場合に使えます
          • WordPress管理画面でボタンをポチりすればCloudFrontのキャッシュが消えてくれます
          • 以下の記事のようにStaticPress/StaticPress S3を使用している場合に使えます。

        StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例

        【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
        WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

        StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例

        StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
        WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

          なぜCloudFrontのキャッシュを消す必要があるの?という方は以下の記事をご参照ください。

          WordPressのコンテンツをCloudFrontを使って配信しているケースで、更新した内容がサイトに反映されない原因
          WordPressのコンテンツをCloudFrontで配信しているケースで、更新内容が反映されない原因と対処法を知りたい、原因と対処法は知っているけど、もっと簡単に対処したいという悩みを抱えた方向けの記事です。WordPressのプラグイン「Clear CloudFront Cache」を使用することで簡単に対処可能。
          Clear CloudFront Cacheとは

          WordPressのプラグインです
          CloudFront+S3でWordPressコンテンツ配信している際に使えます
          CloudFrontのキャッシュを簡単に削除できる便利プラグインです
          WordPressプラグインのStaticPress S3と一緒に使えます(共存できます)

          ざっくりプラグインの紹介が終わったので、インストール方法について記載していきます!

          インストール方法

          以下の2つの方法がありますので、それぞれご紹介します。

          2つのインストール方法

          WordPressのプラグイン追加画面から検索してインストール
          Githubからダウンロードしてインストール

          WordPressのプラグイン追加画面からプラグインを検索してインストール

          WordPress管理画面からClear CloudFront Cacheをインストールする方法を記載します。

          WordPress画面からインストール
          1. WordPress 管理パネルから、「プラグイン」 -> 「新規追加」をクリックします。
          2. ブラウザの入力ボックスに「Clear CloudFront Cache」と入力します。
          3. 「Clear CloudFront Cache」プラグインを選択し、「インストール」をクリックします。
          4. プラグインを有効にします。
          5. プラグインに CloudFront ディストリビューション ID を設定します
          6. WordPressが動いているEC2に以下の権限を追加します。
          
          // IAM設定例
          {
              "Version": "2012-10-17",
              "Statement": [
                  {
                      "Sid": "VisualEditor0",
                      "Effect": "Allow",
                      "Action": "cloudfront:CreateInvalidation",
                      "Resource": "*"
                  }
              ]
          }
          

          Githubからダウンロードしてインストール

          Githubからダウンロードして、Clear CloudFront Cacheをインストールする方法を記載します。

          Githubからインストール
          1. Githubからプラグインをダウンロードします。Clear CloudFront Cache のダウンロードはこちら
          2. zip ファイルをコンピューター上の場所に保存します。
          3. WordPress 管理パネルを開き、[プラグイン] -> [新規追加] をクリックします。
          4. [アップロード] をクリックし、このページからダウンロードした .zip ファイルを参照します。
          5. [インストール] をクリックし、[プラグインを有効にする] をクリックします。
          6. distribution IDをClear CloudFront Cacheプラグインに設定します。
          7. WordPressが動いているEC2に以下の権限を追加します。
          
          //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

          Clear CloudFront Cache

          CloudFrontのディストリビューションIDを入力して保存すれば準備完了。

          あとはキャッシュ削除が必要な時にキャッシュクリアボタンを押すだけで、CloudFrontのキャッシュを削除できます。

          次に、Clear CloudFront Cacheの特徴について、記載します。

          特徴

          Clear CloudFront Cacheの特徴は以下の通りです。

          特徴
          • 入力項目は「ディストリビューションID」のみ
          • 権限はEC2のロールに付与する
            • 「アクセスキー」「シークレットキー」が不要なのでとってもセキュア
            • EC2に付与する必要があるポリシーも最低限でいいので安心

          まとめ

          WordPressプラグイン「Clear CloudFront Cache」を紹介させていただきました!

          Clear CloudFront Cache

          CloudFrontのキャッシュを削除してくれる便利なWordPressプラグイン
          簡単な設定と操作でCloudFrontのキャッシュが削除できる
          アクセスキーを使わないので、とってもセキュアです

          ]]>
          WordPressのプラグインStaticPress S3で固定記事などが表示されない(403エラー) https://it.kensan.net/staticpress_fix_contents.html Mon, 06 Feb 2023 00:07:19 +0000 http://ec2-13-112-80-120.ap-northeast-1.compute.amazonaws.com/it/?p=32 WordPressのプラグインStaticPress S3で、CloudFront + S3でコンテンツ配信しているケースで、固定記事などが表示されない(403エラーになる)場合の対処法について記載します。

          WordPressのStaticPress S3の導入については以下の記事をご参照ください。

          【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
          WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

          本記事は上記の構築をした後など、StaticPress S3プラグインを使ってS3+CloudFrontでWordPressコンテンツ配信時に、固定記事などが表示されない場合の対処法を記載します。

          なぜ固定記事が表示されないか

          固定記事は

          {固定記事名}/index.html

          上記の形式でS3に転送されます。

          しかし、固定記事のリンクURLは

          {固定記事名}/

          となります。

          「index.html」がリンクURLにないため表示されないため、

          S3上でファイルが見つからず403エラーとなっています。

          対処方法

          StaticPressのPHPプログラムを修正する方法もありますが、今回は、CloudFrontの関数を使用して、URLの書き換えを行います。

          せっかくCloudFrontで配信してるのだから、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関数とディストリビューションの紐付け

          関数を発行後に、発行タブにある「関連付けを追加」ボタンを押下します。

          関連付けを追加設定

          ディストリビューション:CloudFrontのディストリビューションを指定
          イベントタイプ:Viewer Request
          キャッシュビヘイビア:環境にあったものを選択
          (特別な設定をしていなければ、Defaultを選択)

          上記設定後に「関連付けを追加」ボタンを押下して、実際に関数とCloudFrontの紐付けを行います。

          動作確認

          固定記事等の403エラーが発生していたリンクを押下し、ページが表示されればOKです。

          まとめ

          StaticPress使用時の403エラーが簡単に解決できたとおもいます。

          CloudFrontの関数、便利ですね。

          CloudFrontの関数については以下の記事も参考になるかと思いますので、よろしければご覧ください。

          AWS S3 + CloudFrontでhtaccessのような「URL書き換え」や「Basic認証」をする方法

          CloudFront関数の公式記事も載せておきます!!

          チュートリアル: CloudFront Functions を使用した単純な関数の作成 - Amazon CloudFront
          このチュートリアルを完了すると、簡単な関数を作成して CloudFront Functions を使用できるようになります。
          ]]>
          WordPressのプラグインStaticPressで不要な静的ファイルが生成されないようにする https://it.kensan.net/staticpress_-unnecessary_file.html Sun, 05 Feb 2023 21:58:54 +0000 http://ec2-13-112-80-120.ap-northeast-1.compute.amazonaws.com/it/?p=43 WordPressのプラグインStaticPressで不要な静的ファイルが生成されないようにする方法を記載します。

          WordPressのStaticPressの導入については以下の記事をご参照ください!

          StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例

          【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
          WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

          StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例

          StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
          WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

          本記事はStaticPressを導入後に、不要な静的ファイルが出力されないようにする方法を記載します。

          不要な静的ファイルとは配信サーバに不要なページであるWordPressの管理画面などのHTMLを指します。

          不要なファイルを生成されないようにすることで、以下のメリットがあります。

          2つのメリット

          ディスク容量の削減
          StaticPressでの再構築時間の短縮

          配信に不要なページについて

          配信サーバに不要なページについて、具体的には以下のフォルダを不要と考えています。

          配信に不要なフォルダ
          • 配信に不要なフォルダ
            • /wp-admin/*
              • 管理画面。配信不要ページ。
            • /wp-content/plugins/*
              • pluginを管理しているフォルダ。配信時にプラグインは不要(動かさない)。
            • /wp-includes/*
              • API、クラス、関数などのプログラムファイルを管理しているフォルダ。配信時は不要
            • /wp-json/*
              • WordPressのAPIレスポンスを保存するフォルダ。配信サーバ時は不要。
            • /author/*
              • 投稿者ごとのページ。必要な場合は残す。

          なぜ対応が必要なのか

          改めて、不要なページを出力しないようにする理由について、記載していきます。

          配信に不要なページについて、静的HTMLを出力しないようにすることで、以下のメリットがあります。

          メリット詳細

          <WordPressサーバ(EC2)からみたメリット>
          メリット1:EC2ディスク容量の節約できる
          メリット2:再構築(HTML生成)時間の短縮


          <配信サーバ(S3)からみたメリット>
          ※WordPressサーバ(EC2)で配信している場合は対象外です。配信サーバにS3を使用している場合、以下のようになります。
          WordPressサーバで不要なページについては静的ファイル(HTMLファイル)の生成対象外となるため、StaticPress S3でS3に同期(コピー)対象から不要なページが含まれないようになります。これにより以下のメリットがあります
          メリット1:S3 APIの節約に役立ちます
          メリット2:S3 ストレージの節約に役立ちます

            それでは、不要な静的ファイルが生成されないようにする方法を記載します。

            不要な静的ファイルが生成されないようにする方法

            生成対象外とする対象のフォルダによって対応方法が異なります。

            まずは、wp-adminwp-includesフォルダを除外する方法を記載します。

            wp-adminwp-includesを静的ファイル生成対象外とする

            修正対象ソース:/wp-content/plugins/staticpress/includes/class-static_press.php

            869行目辺りを以下のように修正する

            次に、以下の静的ファイルを生成されないように対応します。

            ・/wp-content/plugins/*

            ・/wp-json/*

            ・/author/*

            /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にアクセスし、サイトが正常に表示される

            ]]>
            WordPressのプラグインStaticPressでBasic認証を使う https://it.kensan.net/staticpress-basic-auth.html Sun, 05 Feb 2023 06:20:56 +0000 http://ec2-13-112-80-120.ap-northeast-1.compute.amazonaws.com/it/?p=28 WordPewssプラグインStaticPressを使用して静的HTML配信時のBasc認証の使用方法について記載します。

            StaticPress使用時は以下の観点からBasic認証を設定しておくことをお勧めします。

            Basic認証をオススメする理由

            セキュリティの観点
            SEOの観点

            WordPressのStaticPressの導入については以下の記事をご参照ください。

            StaticPressとStaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例

            【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
            WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

            StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例

            StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
            WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

            Basic認証を設定した方がいい理由を書いていきます!

            Basic認証を設定した方が良い理由

            配信ケース毎にBasic認証を設定した方が良い理由を記載します

            StaticPressとStaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケース

            AWSのEC2のStaticPressにて静的HTMLを生成し、静的HTMLをStaticPress S3を使用して他のサーバ(S3+CloudFront)に転送して配信するケースでのBasic認証について記載します。

            HTMLを生成するサーバ(EC2)には、Basic認証をかけておいた方がSEO的に良いです。

            SEO的に良い理由としては、Basic認証をかけないと、

            「EC2」と「S3+CloudFront」の両方でコンテンツを配信することになり、

            Google等のクローラーから見ると2つのサーバで同一の記事が配信されている(コピー記事配信している)ように見えてしまうためです。

            また、WordPress管理画面にアクセスの際に、Basic認証が必要になるため、セキュリティ向上が期待できます。

            StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケース

            StaticPressを使用して、WordPressが動いているサーバで、静的ファイルの配信を行う場合も、以下の2つのURLが存在することになりますので、「WordPressのURL」の方にはBasic認証をかけた方がSEO的に良いです。

            • WordPressのURL
            • WordPressを静的ファイル化して配信するURL

            また、WordPress管理画面にアクセスの際に、Basic認証が必要になるため、セキュリティ向上が期待できます。

            Basic認証を設定するメリットのまとめ

            配信ケース毎にBasic認証を設定した方が良い理由を記載しましたが、2つの配信ケースで共通して以下のメリットがあると言えます。

            メリットのまとめ

            WordPress管理画面へのアクセスにはBasic認証が必要になる
            →セキュリティ向上
            「WordPressを静的ファイル化して配信するURL」と「WordPressのURL」で、同一の記事が配信されていると、Google等のクローラーにみなされないようにできる(コピー記事配信しているとみなされないようにできる)
            →「WordPressのURL」にBasic認証をかけることで、「WordPressのURL」にGoogle等のクローラーはアクセスできなくなる
            →Google等のクローラーは「WordPressを静的ファイル化して配信するURL」にのみアクセスすることになり、コピー記事配信しているとみなされないようにでき、SEO対策になる

            Basic認証のかけ方

            それでは、本題のBasic認証のかけ方について記載していきます。

            コピペでBasic認証を設定できるよう記載しています。

            大きく以下の2ステップの作業となります。

            Basic認証設定の2つのステップ

            「.htaccess 」と「.htpasswd 」ファイルをEC2上に作成
            →WordPressにBasic認証を設定
            StaticPressのソースコードを修正
            →Basic認証を設定した状態でStaticPressを動かせるようにする

            「.htaccess 」/「.htpasswd 」ファイル作成方法

            WordPressにBasic認証を設定する方法から書いていきます!

            「.htaccess 」ファイル作成方法

            ファイルをviで開きます。

            vi {WordPressドキュメントルート}/.htaccess

            以下のテキストを貼り付けて保存します。

            
            AuthUserFile {WordPressドキュメントルート}/.htpasswd
            AuthGroupFile /dev/null
            AuthName "Please enter your ID and password"
            AuthType Basic
            require valid-user
            

            {WordPressドキュメントルート}の部分は自分の環境のものに書き換える必要があります。

            WordPressドキュメントルートは、WordPressがインストールされているフォルダ(「wp-config.php」ファイルなどがあるフォルダ)を指しています。

            「.htpasswd 」ファイル作成方法

            ファイルをviで開きます。

            vi {WordPressドキュメントルート}/.htpasswd

            ファイルに記載する内容は以下のサイトのように「.htpasswd」の中身を生成してくれるツールがあるので、

            ツールを利用させてもらうなどして、「.htpasswd」の中身をgetしてから、実際に上記で開いたファイルに書き込みをします。

            htpasswdファイル生成(作成)
            htpasswdファイル生成(htpasswdファイル作成)するweb・ウェブ制作に役立つ便利ツール。htaccessを利用したユーザー認証によるアクセス制限(ベーシック認証)が可能です。

            Basic認証動作確認

            WordPressの任意の画面にアクセスして、

            Basic認証がかかっていること、Basic認証を突破できることを確認します。

            StaticPressのソースコード修正

            Basic認証を設定した状態でStaticPressを動かせるように、

            StaticPressのソースコードを修正します。

            Basic認証をかけた状態でStaticPressを使用して、静的ファイルを生成する際(再構築する際)には、ソースコードを編集する必要があります。

            ソースコードを編集しないと、静的ファイルが正しく生成されないので要注意です。

            修正方法は以下をご参照ください。

            修正ソース:wp-content/plugins/staticpress/includes/class-static_press_admin.php 

            修正前


            static public function basic_auth(){
            
return get_option(self::OPTION_STATIC_BASIC, false);
            
}
            修正後


            static public function basic_auth(){

            //return get_option(self::OPTION_STATIC_BASIC, false);
            
return '{「ID:パスワード」をbase64エンコードしたもの}';
            
}

            「{「ID:パスワード」をbase64エンコードしたもの}」の記述内容ついて、

            base64エンコードは以下のようなサイトを利用させてもらうのがオススメです。

            base64エンコード/デコードツール|株式会社エン・PCサービス
            base64エンコード/デコードをウェブ上で行うためのツールです

            動作確認する

            動作確認用の修正をWordPressで行い、

            StaticPressで再構築を行ったあと、

            配信サイト側に修正内容が反映されていればOKです!

            ]]>