概要

AWSのEC2上で、LAMP環境(AWS Linux 2/Apache/MariaDB/PHP)とWordPressで構築したBlog環境に対して、性能改善など改造したことを記録します。

file

改造記録

メモリ不足軽減(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変更失敗

file この2つのURL変更失敗すると(存在しないURLに変更したなど)、2度と管理画面に戻れない可能性があります(実際に遭遇してしまいました)。実際にはDBの次のテーブルとレコードに保存されているので、修正すれば元に戻せます。

file

WordPressのREST APIのコール失敗

「ALB->オリジン」構成の時には問題なかったが、ALBを削除し、「CloudFront->オリジン」の構成に変えた後に、WordPressのREST APIを利用していたPluginsからエラーが吐くようになりました。例えば、

AIOSEOの場合: file

Google Site Kitの場合: file

ChromeのDevToolのコンソール画面には、REST APIへの通信エラーから、/wp-json/*uriになっていることが分かりました。オリジンへのリクエストに、Cookieがうまくヘッダーに

解決方法: CloudFrontの既存のディストリビューションに、/wp-json/*パスに対するビヘイビアを新規作って、キャッシュさせないようにすれば行けそう。

パスとHTTPメソッドの設定: file

キャッシュキーとオリジンリクエストの設定: file

ついでに、WordPress REST APIの認証についての説明資料: WP REST API

レスポンスヘッダーのセキュリティ対策

デフォルトのままですと、WordPressコンテンツのレスポンスヘッダーに、apachephpのバージョン表示されています。これでは悪意の持つ人に攻撃しやすい材料を与えてしまうことになるので、非常にするようにセキュリティ対策をします。

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。紹介ページ: