NginxでハイパフォーマンスWordPress in SoftLayer

2015年5月1日(金)
原 和久

[PR]

Nginx

Nginx(エンジンエックス)は全世界で最も高稼働なWebサイトの実に37%以上に利用され、今も膨大なコンテンツを高速でユーザーに届けている高性能なオープンソースのHTTP Webサーバです。

2002年にオープンソースとして開発が始まり、10年以上を経て多くのユーザ、開発者の貢献によりパフォーマンスと安定性の高さ、豊富な機能、容易な設定、低消費リソースを実現し、多くの支持を得ています。

そんなNginxですが、単にWebサーバとしてだけではなく、ロードバランサやWebアクセラレータとしても活用することが可能です。

Nginxをロードバランサとして利用する場合、いわゆるIPアドレスによる負荷分散を行うL4ロードバランサではなく、URLやHTTPヘッダーで負荷分散が可能なL7ロードバランサとして振る舞います。そのためリクエスト毎にロードバランスするバックエンドを変えるなど、柔軟な設計をとる事が可能です。

Nginxロードバランサの特徴

  • URLに基づいたスマートなバランシング決定
  • 圧縮、キャッシングなどのWebアクセラレーション

なお、Nginxの商用サポートやロードバランスのリアルタイム監視(デモ)などが必要な場合、NGINX Plusを検討すると良いでしょう。本稿の構成ではコミュニティ版のNginxを利用しますが、NGINX Plusはコミュニティ版の設定をそのまま利用することも可能です。

構築概要

今回は次の様なシステムを構築してみたいと思います。まずはスモールスタートで……ということで、Nginxで2台のWordPressサーバをロードバランスする構成です。

フロントにロードバランサとしてNginxを1台、裏にWordPressを実行させるWebサーバを2台、そしてDBサーバとしてMariaDB(MySQLと互換性を持つDB)といったシンプルな構成です。

構築

Step1:サーバのオーダー

まずはSoftLayerのポータルからDevice(サーバ)を4台オーダーしましょう。今回は1Core、1GBメモリ、回線は100Mbpsの最小構成の仮想マシンをオーダーしています。

本稿で紹介する構成は、構築スクリプトをGitHubに公開しているので、それをそのままProvisioning Scriptに指定すれば簡単にできあがるようになっています。

オーダーの注意点(必須)

  • CentOS7.xの最小構成を選ぶ(LAMP構成やDB構成ではなく、4台とも最小構成を選んでください)
  • 4台のサーバーが同じVLANを利用すること
  • SSH Keysを指定する
  • Provisioning Scriptに対応するスクリプトを指定する
lb01:Nginxのロードバランサ

https://raw.githubusercontent.com/kazuhisya/SL-Scripts/master/centos_el7_nginx_lb

wp01、wp02:WordPressのWebサーバ1・2

https://raw.githubusercontent.com/kazuhisya/SL-Scripts/master/centos_el7_nginx_wp

db01:MariaDBのDBサーバ

https://raw.githubusercontent.com/kazuhisya/SL-Scripts/master/centos_el7_mariadb

Step2:初期設定(LB)

サーバが利用できるようなったら、SSH Keysに指定した鍵を使いrootユーザでロードバランサにログインします。Provisioning Scriptにより、既にNginxがインストール済みの状態になっているはずです。

ここからロードバランスの設定を行っていきましょう。/etc/nginx/conf.d/default.confを確認してください。

upstream backend {
    # your servers
    server <WP01 IP>;
    server <WP02 IP>;
}

server {
〜〜 中略 〜〜
    location /wp-admin {
        # only 1st server
        proxy_pass http://<WP01 IP>/wp-admin;
〜〜 中略 〜〜
    }

Nginxをロードバランサとして利用するときは、このupstreamディレクティブで接続先を指定します。に各WordPressサーバに割り振られたPrivate IPを指定します。

location/wp-adminでは、WordPressの管理画面の振り先を指定します。今回の構成では、各WordPressのコンテンツ(画像や設定、プラグインなど)は2台のサーバ間で共有されていません。そのため、管理画面は片側のサーバだけに振り分けて手動で対応していきます。

編集できたら以下のコマンドでNginxを再起動します。

[root@lb01 ~]# systemctl restart nginx.service

Step3:初期設定(DB)

次にDBサーバにsshでログインします。なおDBサーバもProvisioning ScriptによりMariaDBのインストール及びWordPress用DBおよびユーザは既に作成済みです。

ここでは、DBに接続するためのパスワードをメモしておきましょう。

[root@db01 ~]# cat /root/db_password.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Step4:初期設定(WP)

WordPressサーバにsshでログインします。お気づきかもしれませんが既にこのサーバもProvisioning ScriptによりWordPressのインストール及び、それを動かすためのNginx、php、php-fpmが導入済みです。

ここでは、WordPressの設定ファイルを作っていきましょう。サンプルの設定ファイルをコピーします。(wp01、wp02共に実施)

[root@wp01 ~]# cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php

中身を以下の様に編集します。(以下抜粋)

/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'wordpress');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');

/** MySQL のホスト名 */
define('DB_HOST', 'XXX.XXX.XXX.XXX');
  • WordPressのためのデータベース名:wordpress
  • MySQLデータベースのユーザー名:wordpress
  • MySQLデータベースのパスワード:DBサーバの/root/db_password.txtの中身
  • MySQLのホスト名:DBサーバのPrivate IP

また、以下の箇所に関してはWordPress.orgの秘密鍵生成サービスをブラウザから開き書き換えましょう。このユニークキーもDBの設定と同じく、両サーバであわせる必要があります。

/**#@+
 * 認証用ユニークキー
 *
 * それぞれを異なるユニーク(一意)な文字列に変更してください。
 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。
 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

Step5:WordPressセットアップ

WordPressの残りのセットアップはブラウザから行います。ブラウザからNginxロードバランサのPublic IPを開いてWordPressのインストールウィザードを進めてください。

最後まで進むと、以下の様な画面に切り替わります。

サイオステクノロジー株式会社
2012年サイオステクノロジー株式会社に入社。OSS テクノロジーセンター所属。 システム基盤の検証・設計・構築などを担当。最近はクラウドシフト案件を行っている。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています