ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
スポンサーリンク
おさらい
CloudFrontの自動Invalidateまで
前回までの記事では、StaticPressでHTML化し、
StaticPressS3でS3バケットに転送し、
CloudFrontとRoute53を使って独自ドメインでアクセスし、
サイトをSSL化し、
AWSのLambda関数を利用したStaticPressS3での転送時に自動でCloudFrontをInvalidateするところまで設定しました。
不要なファイルの除去
WordPress関連の不要ファイルも転送されてしまっている
今の状態だと、Wordpressで利用するテーマファイルやプラグイン、その他不要なファイルまでS3バケットに転送されてしまっています。
転送不要なファイル
その中で以下のファイルは不要なのでStaticPressの出力対象に含めないようにしてみましょう。
ファイルパス | 説明 |
---|---|
/{year}/{month}/{day}/{post_id}/{アップロード画像名}/ | 添付ファイルページを保存するディレクトリ。 このページを直接参照する事はほぼ無いので不要。 |
/author/* | 投稿者アーカイブページを保存するディレクトリ。 今回のブログは自分一人で運営しているので、こちらのページは不要。 |
/wp-admin/* | WordPressの管理画面で使用するファイルを保存するディレクトリ。 S3側で管理画面を開くことは無いので不要。 |
/wp-content/plugins/* | WordPressのpluginを保存しているディレクトリ。 S3でpluginを動かすことは無いので不要。 |
/wp-includes/* | WordPressの様々な機能を動かすための主要なファイルを保存しているディレクトリ。 S3で運用する上では参照する箇所は無いので不要。 |
/wp-json/* | WordPressのAPIレスポンスを保存するディレクトリ。 S3側ではこの機能は使わないので不要。 |
上記を対象外にするには、複数のファイルを修正する必要があるので一つずつ紹介して行きます。
手順
作業をする前に
今回の作業では、pluginのファイルを修正するので万が一記述を間違えるとpluginが動かなくなってしまうので、バックアップ取る等してから作業をするようにお願いします。
また、pluginによっては除外するとページ側でエラーが発生する可能性があるので、お使いのpluginに合わせて除外するディレクトリを精査した上で、自己責任でお願いします。
添付ファイルページを除外
class-static_press.phpの721行目辺り
添付ファイルページを出力しないようにするには、class-static_press.phpの721行目辺りを以下のように修正する必要があります。
1 2 3 4 5 6 7 |
$posts = $wpdb->get_results(" select ID, post_type, post_content, post_status, post_modified from {$wpdb->posts} where (post_status = 'publish' /* or post_type = 'attachment' */ ) and post_type in ({$this->post_types}) order by post_type, ID "); |
class-static_press.phpの643行目辺り
authorを出力しないようにするには、class-static_press.phpの643行目辺りを以下のように修正する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//643行目辺り private function get_urls(){ global $wpdb; $wpdb->query("truncate table `{$this->url_table}`"); $this->post_types = "'".implode("','",get_post_types(array('public' => true)))."'"; $urls = array(); $urls = array_merge($urls, $this->front_page_url()); $urls = array_merge($urls, $this->single_url()); $urls = array_merge($urls, $this->terms_url()); //$urls = array_merge($urls, $this->author_url()); ←コメントアウト $urls = array_merge($urls, $this->static_files_url()); $urls = array_merge($urls, $this->seo_url()); return $urls; } |
plugins.phpの末尾
次に、pluginsの末尾に以下を追記してください。
1 2 3 4 5 6 |
add_action('StaticPress::file_put', 'static_rm', 1); function static_rm($file_dest, $url){ if(strstr($file_dest, '/author/')){ unlink($file_dest); } } |
wp-admin、wp-includesを除外
class-static_press.phpの863行目辺り
wp-admin及びwp-includesを出力しないようにするには、class-static_press.phpの863行目辺りを以下のように修正する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//863行目辺り 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/を除外
plugins.phpの末尾
authorの除外で追加した関数を以下のように修正してください。
1 2 3 4 5 6 7 |
add_action('StaticPress::file_put', 'static_rm', 1); 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); } |
確認
では、一度S3バケットと出力ディレクトリを削除した上で再構築を実行してみましょう。
正常に転送から除外されるようになりましたね♪
終わりに
以上のように、AWSのLambda関数を利用する事でCloudFrontを使っていてもコンテンツの即時反映がされるようになりました。
これで記事を書いて転送することだけに集中出来るので、どんどんコンテンツを増やしてPV増加を狙ってみてください♪