Closed6

WordPress をヘッドレス化するメモ

ピン留めされたアイテム
ega4432ega4432

環境

  • Amazon Lightsail を使って立ち上げた EC2
  • WordPress 用の AMI を利用

前提

  • S3 上にホストしている他のサイトから WordPress REST API を叩かせる。
  • Lightsail に SSH しての作業は管理コストが嵩むので、なるべく楽な方法を模索する。

要件

  • WordPress の通常画面はユーザに見えないようにする。
  • 管理画面は社内ユーザが記事を投稿するためログインでき、かつ画面上で操作ができるようにする。
ega4432ega4432

Basic 認証をかけるパターン

WordPress フロントに Bisic 認証を使ってアクセス制限をかける手法は以前試した。
ただ、その時詰まったこととしては、API コールで Header に認証情報を付与する必要があり Preflight リクエストが発生し、 CORS エラーとなった。

単純に WordPress が動いている Apache に Access-Control-Allow-Origin: * を設定してあげれば行けそうだけど、前回試した時は時間の都合上ここで断念した。

Pros.

  • ソースコードを触ることなく Apache の conf をいじるだけで簡単に実現できる。
  • セキュア

Cons.

  • フロント側で認証情報を送るようにする追加実装が発生する。
ega4432ega4432

テーマを空にするパターン

上記の掲載した URL などで一番多い手法。
テーマの HTML ファイルを空にする。残しているのは下記のファイルのみとするパターン。

  • index.php
  • style.css
  • functions.php

Pros.

  • やっている人が多い分ネット上にメソッドが散らばっている。

Cons.

  • ソースコードのバックアップ(バージョン管理までしてなくも良い?)しておく必要がある。
  • アクセスできないようにするための何かしらの対応が必要
    • 空 HTML とはいえアクセスはできる可能性がある
    • SEO 上の問題(インデックスされてしまう可能性がある)
ega4432ega4432

結論

htaccess.conf を下記に対応できるように書き換えることで実現した。

  • /
    • WordPress への直接アクセスは拒否
    • 以前はオフィスの IP アドレスからのアクセスは許可していましたが、今回完全にヘッドレス化しても問題なかったため外しました。
  • /(wp-json|wp-content|wp-includes|wp-admin)/*
    • これらは API からのデータ取得(画像含む)、管理画面で必要なためアクセス許可
  • index.php|wp-login.php
    • エントリーポイントとログインで使うためアクセス許可
このスクラップは2021/03/26にクローズされました