概要
AWSのEC2上で、LAMP環境(AWS Linux 2/Apache/MariaDB/PHP)とWordPressで構築したBlog環境に対して、性能改善など改造したことを記録します。
改造記録
メモリ不足軽減(Memory Shortage Mitigation)
利用しているAWSの無料枠のt2.microでは[1vCPU, メモリ1GB]というスペックになっています(無料枠なので、仕方がありません)。
Blog書く初期段階では、504
のサーバー側エラーが頻発していたので、top
コマンドでみると、明らかにメモリ不足状態に陥ている状態でした。仕方なく、ディスク容量の一部を仮想メモリ化して凌ぐことにしました(応急措置)。
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 ← 2GBのスワップファイルを作成
$ sudo mkswap /swapfile ← スワップ領域をセットアップ
$ sudo swapon /swapfile ← スワップファイルを使用
$ sudo chmod 600 /swapfile ← 読み書きのパーミッション設定
上記では、2GBのSwapfileを確保しています。
$ sudo swapon -s ← 正常に完了したことを確認
ファイル名 タイプ サイズ 使用済み 優先順位
/swapfile file 2097148 479744 -2
/etc/fstab ファイルを編集して、起動時にスワップファイルに自動マウントする。
$ sudo vi /etc/fstab
ファイルの末尾に次の新しい行を追加し、ファイルを保存して終了。
/swapfile swap swap defaults 0 0
参考資料:Amazon EC2 インスタンスのスワップ領域として機能するようにメモリを割り当てる
アップ画像サイズ拡大(Expand the file size of upload images)
インストール直後では、WordPress上で画像アップロードする特の最大サイズが2MBまででした。これを拡大すればあげることが可能。
制限しているのはPHPであり、php.iniの下記設定項目をいじることで変更可能。
$ sudo vim /etc/php.ini
upload_max_filesize = 2M
しかし、下記関連する2項目と依存関係があるので注意
$ cat php.ini | egrep "post_max_size|memory_limit"
memory_limit = 128M
post_max_size = 10M
依存関係は upload_max_filesize < post_max_size < memory_limit
になります。
管理画面のURL変更失敗
この2つのURL変更失敗すると(存在しないURLに変更したなど)、2度と管理画面に戻れない可能性があります(実際に遭遇してしまいました)。実際にはDBの次のテーブルとレコードに保存されているので、修正すれば元に戻せます。
WordPressのREST APIのコール失敗
「ALB->オリジン」構成の時には問題なかったが、ALBを削除し、「CloudFront->オリジン」の構成に変えた後に、WordPressのREST APIを利用していたPlugins
からエラーが吐くようになりました。例えば、
AIOSEOの場合:
Google Site Kitの場合:
ChromeのDevToolのコンソール画面には、REST APIへの通信エラーから、/wp-json/*
のuri
になっていることが分かりました。オリジンへのリクエストに、Cookie
がうまくヘッダーに
解決方法:
CloudFrontの既存のディストリビューションに、/wp-json/*
パスに対するビヘイビアを新規作って、キャッシュさせないようにすれば行けそう。
パスとHTTPメソッドの設定:
キャッシュキーとオリジンリクエストの設定:
ついでに、WordPress REST APIの認証についての説明資料: WP REST API
レスポンスヘッダーのセキュリティ対策
デフォルトのままですと、WordPressコンテンツのレスポンスヘッダーに、apache
とphp
のバージョン表示されています。これでは悪意の持つ人に攻撃しやすい材料を与えてしまうことになるので、非常にするようにセキュリティ対策をします。
apacheの場合
httpd -v
でバージョンを確認し、Apache/2.2.x と Apache/2.4.xの場合、次のようにhttpd.conf
の最後に2行を追加し、httpd
サーバを再起動します。
ServerTokens ProductOnly
ServerSignature off
そうすると、該当ヘッダー行にはserver: Apache
のようにバージョン表示がなくなります。
phpの場合
デフォルトの設定では、ヘッダーにx-powered-by: PHP/x.y.z
のようにバージョン表示されています。対策としては、php.ini
ファイルに、以下の行になるように変更(デフォルトはOn)します。
expose_php=Off
設定の反映は、 php.fpm
の場合は次のようにします。
$ sudo systemctl restart php-fpm
My Flavorite Plugins
WP Githuber MD
An all-in-one Markdown plugin for your WordPress sites。紹介ページ: