PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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