WordPress

「KUSANAGI for さくらのVPS」と「通常WordPress」を比較

「KUSANAGI for さくらのVPS」は、WordPressが高速に動作する無償の仮想マシンイメージ。
さくらのVPSの標準OSインストールとして、2016年10月31日からKUSANAGIの提供が開始されています。
実際にKUSANAGIを使用するとWordPressがどれくらい高速化するのか「KUSANAGI for さくらのVPS」と「通常WordPress」を比較検証してみました。

環境

  通常のWordPress KUSANAGI for さくらのVPS
OS(メモリ) CentOS 7.2(512MB) CentOS 7.6(512MB)
KUSANAGIバージョン 8.4.2
Apacheバージョン 2.4
PHPバージョン 7.1 7.3
WordPressバージョン 5.1.1
使用テーマ Twenty Seventeen
有効プラグイン なし
使用テキストデータ 夏目漱石「こころ」全文

GTmetrix によるパフォーマンス比較

通常のWordPress KUSANAGI for さくらのVPS
GTmetrixで検証した結果、「通常のWordPress」よりも「KUSANAGI for さくらのVPS」の方がページスピードが25%も向上していました。また、「KUSANAGI for さくらのVPS」の場合、読み込み時のページサイズが約半分になっているのが分かります。

Google PageSpeed Insights によるパフォーマンス比較

通常のWordPress KUSANAGI for さくらのVPS
PageSpeed Insightsで検証した結果、「通常のWordPress」よりも「KUSANAGI for さくらのVPS」の速度スコアが約2倍も向上していました。実際に体感スピードとしてもページの読み込みが速くなっているのが分かりました。

Apache Bench による負荷テスト比較

同時に100ユーザが10リクエスト/1ユーザを発行した場合で検証しました。

  通常のWordPress KUSANAGI for さくらのVPS
Time taken for tests
テストに要した時間
0.249 seconds
26.547 seconds
Requests per second
1秒で処理できるリクエストの数
4008.22 [#/sec]
37.67 [#/sec]
Time per request
1リクエスト処理に要した時間
24.949 [ms]
2654.682 [ms]
Transfer rate
1秒間で受け取れたデータのサイズ
1886.68 [Kbytes/sec]
8421.20 [Kbytes/sec]
Apache Bench で負荷テストを検証した結果、「通常のWordPress」の方が「KUSANAGI for さくらのVPS」よりも良い結果となりました。「KUSANAGI for さくらのVPS」の推奨環境が4GBということもあるので、その部分も影響しているのかもしれません。

※Failed requests(処理に失敗したリクエストの数)の項目について、正確な数値が計測できないため表示していません。

まとめ

Apache Bench では「通常のWordPress」に軍配が上がりましたが、GTmetrix と PageSpeed Insights では「KUSANAGI for さくらのVPS」のパフォーマンスが通常のWordPressよりも向上することが分かりました。
サーバーのメモリーが512MBという環境下でも大きな差が出ているので、メモリーが増えた環境では「KUSANAGI for さくらのVPS」がさらに本領を発揮するのかもしれません。
結果的に、WordPressに速さを求めるのであれば、「KUSANAGI for さくらのVPS」を試してみる価値はあります。

WordPressのファイルアップロード上限サイズの変更

WordPressにオリジナルテーマをアップロードしようとした際、下記のようなメッセージが表示されてインストールができない。
「本当に実行していいですか? もう一度お試しください。」

何故なのか調べてみると、php.iniで設定されているアップロードファイルの上限サイズを超えてしまったようです。
たしか、以前のWordPressで同じようにアップロードファイルの上限サイズを超えた場合には、下記のメッセージだったはずですが表示変更されたのでしょうか。
「アップロードしたファイルはphp.iniで定義されたupload_max_filesizeを超過しています。」

解決方法は、php.iniで記述されている「upload_max_filesize」の設定を変更します。
まず、php.iniがどこにあるか探すため、findコマンドでphp.iniを検索します。

[root@ ~]# find / -name php.ini

次に、php.iniを開いて「File Uploads」の項目にある「upload_max_filesize」の設定を変更します。
初期設定では、「upload_max_filesize = 2M」と記述してありますので、その行頭に;を追加してコメントアウトします。
その次の行に「upload_max_filesize = 10M」を新たに追加します。

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
;upload_max_filesize = 2M
upload_max_filesize = 10M

変更完了後、php.iniを上書き保存し、WEBサーバーを再起動させます。

[root@ ~]# service httpd restart

以上で10Mまでのファイルをアップロードできます。
今回は10Mまで上限サイズを変更していますが、必要な容量に合わせて数値は変更してください。

.htaccessでWordPressを守る

VPSサーバーは、ある程度まで構築してしまうと日常であまりやることがありませんw
今回は、WordPressを導入したときの、.htaccessによる基本的なセキュリティ設定方法についてご紹介します。
.htaccessファイルに下記のコードを設定していきます。

①.htaccessの保護

まずは、.htaccessに不正アクセスされては元も子もないので、.htaccessファイル自体をアクセス拒否して保護します。

<Files ~ "^.*\.([Hh][Tt][Aa])">
 order allow,deny
 deny from all
 satisfy all
</Files>

②WordPress内にあるディレクトリ一覧の非表示

WordPress内にあるディレクトリ一覧をブラウザなどで閲覧できないようにします。
当サイトのWebサーバーの構築で既に設定済みですが、念のため。

Options -Indexes

③wp-config.phpの保護

wp-config.phpには、データベース関連のパスワードなど大切な設定が書かれていますので、必ず保護しましょう。

# protect wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

④wp-mail.phpとinstall.phpを保護

wp-config.phpを保護しましたが、さらにwp-mail.phpとinstall.phpもアクセス拒否して保護します。
下記の設定では、wp-config.phpも保護する設定です。

<FilesMatch "^(wp-config\.php|wp-mail\.php|install\.php|\.ht)">
order allow,deny
deny from all
</FilesMatch>

⑤スクリプトインジェクション対策

フォームから不正なscriptタグを入力しても実行処理しないようにします。

Options +FollowSymLinks
RewriteEngine On
# <script> タグ
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# PHP グローバルに関連するもの
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# _REQUEST を変更しようとするもの
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
#マッチしたURLへのアクセスを禁止("403 Forbidden"のレスポンスを返す)
RewriteRule ^(.*)$ index.php [F,L]

⑥日本国外からのログイン画面へのアクセスを制限

不正アクセスの多くが日本国外からのため、国内のIPアドレスの場合だけログイン画面にアクセスできるようにし、日本国外のIPアドレスはログイン画面にアクセス出来ないようにします。
また、XML-RPCの脆弱性を狙った不正アクセスの試みも頻繁に発生するため、xmlrpc.phpへのアクセス制限も一緒にします。
下記サイトにアクセスして、「.htaccessダウンロード」ボタンを押して、.htaccessファイルをダウンロードします。その.htaccessファイルに記載されている「allow from IPアドレス」全てをコピーして、下記のハイライトした部分にペーストしてください。
IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI’s

<Files ~ "^(wp-login\.php|xmlrpc\.php)$">
Order deny,allow
Deny from all
allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
allow from 1.5.0.0/16
allow from 1.21.0.0/16
allow from 1.33.0.0/16
(以下、日本国内IPアドレス続く)
...
...
...
</Files>

以上の.htaccess設定でWordPressの基本的なセキュリティは確保できると思います。
上記以外にも.htaccessによるセキュリティ向上方法があった場合には、随時追記していきます。

【参考サイト】
.htaccessをWordPressで徹底活用 | CSSPRO
WP インストール時の注意点とセキュリティ | Web Design Leaves