モロモロ工事中です

さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き)

nginx,WordPress — タグ: , — さくら @ 2011/09/07 15:07

負荷的に厳しくなってきたので sakuratan.biz を Apache(さくらスタンダード)から nginx(さくら VPS 512)に移転しました。
頻発していた 503 もほとんど出なくなって快適です。

Apache から VPS の nginx へ WordPress を移転したいと考えている人もいるかなーと思いましたので、さくら VPS で nginx リバースプロクシを使った WordPress ブログの構築する方法をがっつり書いていきたいと思います。

結構長文になってしまいましたので、先に索引を載せときます。

  1. nginx とは
  2. nginx が速い理由
  3. リバースプロクシ
  4. さくら VPS にインストールするシステム構成
  5. EPEL パッケージリポジトリのインストール
  6. MySQL のインストール
  7. PHP のインストール
  8. nginx のインストール
  9. nginx と PHP FastCGI の設定
  10. WordPress のインストール
  11. Nginx Proxy Cache Purge WordPress プラグインのインストール
  12. ベンチマーク
  13. 参考サイト

nginx が速い速いとだけ言われてもいまいち腑に落ちない方もいらっしゃるかと思いましたので、最初の方の章は nginx 自体の説明にしました。前置きは置いといてとりあえずインストール方法を知りたい方は、『さくら VPS にインストールするシステム構成』あたりからどうぞ。ちなみにさくら VPS は CentOS ですので、他のレン鯖でも OS が同じなら同じ手順でインスコできると思います。

サンプルのファイルをまとめた zip を nginx-examples.zip に置いてますので、とりあえずファイルだけ欲しいって人はこちらをどうぞ。

あと、なんとなくあった方が良いかなーと思いまして Apache と nginx のベンチマークもしてみました。結果の方は最後の方に載せてますが、結論だけ言えば nginx は多い日も安心のロリエセーフティロング高性能です。

nginx とは

まず最初に nginx の wiki から引用します。

Nginxはその高いパフォーマンスと安定性、豊富な機能、設定の容易さ、消費リソースの低さで知られています。

NginxはC10K問題に取り組むべく開発された一握りのサーバのうちの一つです。従来のサーバとは異なり、Nginxはリクエストの処理をスレッドに依存していません。その代わりにもっとスケーラブルな(非同期の)イベント駆動アーキテクチャを使用しています。このアーキテクチャはメモリ使用量が少ないだけでなく、最も重要な事として、稼働時のメモリ使用量が予測可能であるということです。

http://wiki.nginx.org/NginxJa

C10K問題とは、ハードウェアは安くなって大量のクライアントを同時処理できるようになったけど、OS やサーバプログラムの実装がボトルネックになってて1万(=10K)クライアント以上は処理できない(*´・ω・)(・ω・`*)ネー、という問題です。(Web2.0の先にあるC10K問題 - @IT の説明が分かりやすいと思いますので詳しく知りたい方はどうぞ。)

上の概要に書いてますが、nginx はC10K問題を解決すべく作られた新しいウェブサーバですので、Apache 等の従来からあるウェブサーバと比べて本質的にスケーラブルなシステムとなっています。

nginx が速い理由

開発されてる方でしたら、nginx が速いと言う話をどこかで聞いた事があるかと思います。

実際のところ nginx が速いと言うよりも、nginx は Apache などの従来のサーバと比べ少ないリソースで複数の HTTP リクエストを処理できるように設計されているため、サーバが負荷の高い状態になっても性能が劣化しにくい、と言うのがより正確だと思います。

ということで、nginx が高負荷状態に強い仕組みについて簡単に説明しようと思います。


nginx では外部からのネットワークコネクションを受け付けるプロセスをマスタープロセス、HTTP リクエストに対するレスポンスを返すプロセスをワーカープロセスと呼びます。マスタープロセスはコネクションを受け取ると稼働中のワーカープロセスのいずれかに HTTP レスポンスを返す処理を行うよう指示します。(マスター/ワーカープロセス構成自体は TCP/IP ベースの Unix daemon の一般的な構成ですので速い理由と関係ありません。)

nginx のワーカープロセスは(kqueue (FreeBSD 4.1以降)/epoll (Linux 2.6以降) などのカーネルによって異なる)非同期 I/O 通知メソッドを使い、複数のリクエスト/レスポンスを一つのプロセスで平行して同時に処理します。


一方、Apache などの従来のウェブサーバでは、リクエストを応答するプロセスは同期 I/O を使います。同期 I/O を使うと一つのワーカープロセスは複数の HTTP リクエストを同時に処理することができません。複数の HTTP リクエストを処理する場合は、先行するリクエストが完了するのを待って順次処理していきます。


Apache の場合、サーバにアクセスが集中し応答すべきリクエストが増えてきて、既に起動しているワーカープロセスだけでは処理が追いつかなくなると、新しいワーカープロセスを起動したり/新しいワーカープロセスを起動できない場合応答中のレスポンスの完了を待ってからリクエスト処理を開始することになります。

ワーカープロセスはそれぞれある程度のメモリを使用しますので、システムリソースから決まる同時応答可能な上限を越えると(スラッシングが発生するなどの原因で)ウェブサーバ全体の性能が急激に悪化します。(MPM worker を使って Apache をマルチスレッドで動かす場合も、1スレッドに対してそれなりのシステムリソースが必要となりますので、高負荷状態においてこの問題はそれほど改善しないです。)

それに対して nginx の場合、非同期 I/O を使って一つ(設定により増やせますがあくまで少数)のワーカープロセスですべてのリクエストを処理するよう設計されいます。必要なシステムリソースが少ないので、Apache では性能が悪化する局面でも極端に性能が悪化しません。なので nginx は速い、ということになります。


ちなみにワーカープロセスが行うレスポンス処理については Apache と nginx で特に性能に差がある訳ではありませんので、1リクエスト当たりの実処理時間はだいたい同じです。(一部のベンチマークではレスポンス自体は nginx の方が遅いという数字が出ていますが、自分のサイトで測った限りでは意味のある差はでませんでした。いずれにしても今時のサーバだと、ワーカープロセスの性能の優劣は特に気にする必要はないと思います。)


 _______________________
     <○√  くそっもうだめか・・!!
      くく   リクエストが多すぎる、Apacheでは処理しきれない・・・
 ________________________________
        ~|
         \○    大丈夫か?BOY
            ∥\
   <○>     ∥/
    ∥    / |
    >>    \ |
 nginxさん!!

リバースプロクシ

リバースプロクシとは、ざっくり言いますとウェブサーバをまるごとキャッシュする機能です。

WordPress などを動かす場合、アプリケーションを実行する部分がウェブサーバのボトルネックとなります。このボトルネックを解消するために、WP Super Cache などのアプリケーションレベルでのキャッシュや mod_cache などのウェブサーバレベルでのキャッシュがありますがウェブサーバと別にリバースプロクシサーバを用意しプロクシサーバがキャッシュを行うという解決方法もあります。


リバースプロクシを加えたウェブサーバの処理は下図のようになります。

リバースプロクシサーバがフロントエンドとなり、80 番ポートで外部からの HTTP リクエストを受け取ります。
リクエストされた URL がキャッシュされていれば、プロクシサーバはキャッシュ済みのレスポンスを返します。
キャッシュされていなければウェブサーバへリクエストを転送し、レスポンスをキャッシュして返します。

プロクシサーバには PHP スクリプトを実行する機能などは不要ですので、通常ウェブサーバよりも高速に動くよう実装されています。システム構成にリバースプロクシを加えることで全体での処理能力が高くなります。

nginx をリバースプロクシにする場合、リバースプロクシの設定が簡単なので(一つの設定ファイルにフロントエンドのプロクシサーバとバックエンドのウェブサーバの設定を記述できます)、とりあえずリバースプロクシも立てとけって感じです。


ちなみに、nginx をリバースプロクシに、バックエンドのウェブサーバは元から動いていた Apache そのまま、といった構成も可能です。VPS(特にさくら VPS 512)ではメモリサイズ的にこの構成は少し厳しいと思いますが、リソースにある程度余裕がある状況では費用対効果の高い性能改善策になると思います。

さくら VPS にインストールするシステム構成

ということで、nginx 自体の説明はこの辺にして、さくら VPS で nginx リバースプロクシを有効にした WordPress ブログのインストール方法について説明していきたいと思います。

まずさくら VPS のデフォルト OS は CentOS でして、OS はそのまま使う設定で話を進めます(VPS に Debian 入れたりする人は nginx の How To 記事なんか見なくても自分で設定できると思いますし)。CentOS ならさくら VPS 以外のサーバでもだいたい同じような手順でインスコできると思います(プレインストールされている yum パッケージの構成やバージョンが違う場合、一部異なる手順になるかもしれませんが)。


インストールするシステム構成はこんな感じです。リバースプロクシ/ウェブサーバともに nginx を使います。nginx には PHP を実行する機能がありませんので、FastCGI サーバとして PHP を実行します。

  • nginx 1.0.6 + Cache Purge plugin
  • PHP 5.3.3 + FastCGI + eAccelerator
  • MySQL 5.0.77
  • WordPress 3.2.1-ja

MySQL は yum のパッケージから普通にインスコします。

PHP は最近 yum に追加されたっぽい php53 パッケージを使います。eAccelerator があった方が良いのですが、php53 系列には eAccelerator のパッケージが無いのでこれだけソースからインスコします。

nginx はソースからビルドしてインスコします。nginx のパッケージが EPEL リポジトリにあるのですが、WordPress を動かす場合パッケージ版の nginx には含まれていない Cache Purge プラグインが欲しいので、パッケージは使いません。(nginx にプラグインを追加する場合はビルド時に組み込む必要があります。)


以下、EPEL のインスコ、MySQL インスコ/起動、PHP インスコ、nginx インスコ、nginx / PHP FastCGI の設定、WordPress インスコ…みたいな順番で書いてます。知ってるところは適当に読み飛ばしてください。

特に明記しない場合すべて root で作業を行う前提で書いています。まずサーバにログインして su するか sudo してください。

EPEL パッケージリポジトリのインストール

最初に EPEL パッケージをインスコします。EPEL の公式サイト から epel-release-5-4.noarch.rpm をダウンロードして rpm コマンドでインスコします。(EPEL 6 系列は CentOS にはインストールできませんので epel-release-5-4.noarch.rpm もしくはバージョン 5 系列の最新版をインストールしてください。)

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5-4.noarch.rpm

EPEL パッケージのインスコ方法も含めて、yum 関係で VPS を借りたら最初にしといた方が良い作業が ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) – さくらインターネット創業日記に書かれてますので、よく分からない人はまずはこちらをご覧ください。

MySQL のインストール

MySQL は yum パッケージをインスコします。

yum install mysql mysql-server

インスコしたらサーバを起動し、chkconfig でリブート時に MySQL サーバが立ち上がるように設定します。

/etc/init.d/mysqld start
/sbin/chkconfig --level 345 mysqld on

PHP のインストール

yum から php53 パッケージをインスコし、eAccellaretor だけソースからビルドします。

yum install php53 php53-cli php53-xml php53-mysql php53-mbstring php53-devel

php53-xml は要らないような気もしますが検証するの忘れてましたのでとりあえずインストールするということで。

PHP をインスコできたら、eAccellaretor のソースコードを SourceForge からダウンロードして展開します。(eAccellaretor のビルド作業については、make install 以外は一般ユーザーで作業しても問題ないです。)

wget http://downloads.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.6.1.zip
unzip eaccelerator-0.9.6.1.zip

ビルドしてインスコします。

cd eaccelerator-0.9.6.1
phpize
./configure --enable-eaccelerator
make
make install

make install で /usr/lib64/php/modules に eaccelerator.so がコピーされますので、/etc/php.ini の extension に eaccelerator.so を追加します。

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

extension=eaccelerator.so

デフォルトでは eaccelerator.cache_dir が /tmp/eaccelerator になっていますが個人的に /var/tmp 以下にしたいので、php.ini の末尾に以下の設定を加えます。デフォルトで問題ない場合はそのままでどうぞ。

[eAccelerator]
eaccelerator.cache_dir = "/var/tmp/eaccelerator"

eaccelerator.cache_dir を作ります。パーミッションはサーバによって適当に変えてください。

mkdir -p /var/tmp/eaccelerator
chmod 777 /var/tmp/eaccelerator

nginx のインストール

nginx をソースからビルドするため、ビルドと実行に必要な yum パッケージをインスコします。

yum --enablerepo=epel install make automake gcc gcc-c++ rpm-build spawn-fcgi \
pcre-devel zlib-devel openssl-devel libxslt-devel GeoIP-devel gd-devel

スクラッチからビルドすると init.d のスクリプト等を用意しないといけないので、nginx のソースパッケージ (SRPM) をダウンロードしてから、最新版の nginx を Cache Purge Plugin 付きでビルドするように nginx.spec を書き換えます。

まず EPEL 配布サイトから nginx の SRPM nginx-0.8.54-1.el5.src.rpm をダウンロードします。

wget http://download.fedora.redhat.com/pub/epel/5/SRPMS/nginx-0.8.54-1.el5.src.rpm

SRPM は rpm コマンドでインスコします。/usr/src/redhat/SPEC に nginx.conf が、/usr/src/redhat/SOURCES に SRPM に含まれるファイルが展開されます。

rpm -ivh nginx-0.8.54-1.el5.src.rpm

rpm -ivh を実行する際に mockbuild ユーザーが存在しないためワーニングが出ますが無視して問題ないです。

SRPM をインスコできたら、/usr/src/redhat/SOURCES に最新版の nginx と Cache Purge plugin をダウンロードします。

cd /usr/src/redhat/SOURCES
wget http://nginx.org/download/nginx-1.0.6.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-1.3.tar.gz

nginx-1.0.6 で Cache Purge を有効にした nginx.spec を nginx.spec に置いてますので /usr/src/redhat/SPECS ディレクトリにダウンロードしてからビルドします。

cd /usr/src/redhat/SPECS
mv nginx.spec nginx.spec.orig
wget http://sakuratan.biz/nginx/nginx.spec
rpmbuild -bb nginx.spec

ビルドが終われば /usr/src/redhat/RPMS/x86_64 に nginx-1.0.6-1.x86_64.rpm が作成されますので rpm コマンドでインスコします。

rpm -Uvh /usr/src/redhat/RPMS/x86_64/nginx-1.0.6-1.x86_64.rpm

nginx と PHP FastCGI の設定

必要なものがインスコできたら nginx の設定をしていきます。


PHP FastCGI サーバ起動用スクリプトの作成

FastCGI サーバとして PHP を起動するためのスクリプトを php-fastcgi に置いていますので、ダウンロードしてから /etc/init.d に置きます。

wget http://sakuratan.biz/nginx/php-fastcgi
mv php-fastcgi /etc/init.d
chmod 755 /etc/init.d/php-fastcgi

PHP FastCGI サーバの実行ユーザー等を変更する場合は、php-fastcgi スクリプトの以下の箇所を変更してください。なお、以下の説明では 9000 番ポート上で PHP FastCGI サーバを起動する設定で例示しています。また、FastCGI サーバとの通信に TCP/IP ではなく Unix ドメインソケットを使用したい場合は php-fastcgi の spawn-fcgi の起動方法を変更してください(変更方法は各自で調べてください)。

user=nginx
group=nginx
host=127.0.0.1
port=9000
pidfile=/var/run/nginx/php-fastcgi.pid
numclients=5

pidfile を作成するディレクトリは、PHP FastCGI サーバの実行ユーザー(変更しなければ nginx)から書き込める必要がありますので、php-fastcgi スクリプトをデフォルトのまま使う場合は予め /var/run/nginx ディレクトリを作成する必要があります。

mkdir /var/run/nginx
chown nginx:nginx /var/run/nginx

以上の作業が終われば、とりあえず php-fastcgi を起動してみます。

/etc/init.d/php-fastcgi start

エラーが出る場合は設定を確認してください。


nginx.conf の修正

/etc/nginx/nginx.conf にリバースプロクシとバックエンドウェブサーバと PHP FastCGI サーバの設定を追加します。ちょっと長いですが全部貼ります。サーバにファイルを置いてますのでコピペして使いたい方は nginx.conf をどうぞ。

user              nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  5;

    gzip  on;
    gzip_disable "MSIE [1-6]\.";

    proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:4m max_size=50m inactive=120m;
    proxy_temp_path   /var/tmp/nginx;
    proxy_cache_key   "$scheme://$host$request_uri";
    proxy_set_header  Host               $host;
    proxy_set_header  X-Real-IP          $remote_addr;
    proxy_set_header  X-Forwarded-Host   $host;
    proxy_set_header  X-Forwarded-Server $host;
    proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;

    upstream backend {
        ip_hash;
        server 127.0.0.1:8080;
    }

    server {
        listen       80;
        server_name  example.com;

        location / {
            if ($http_user_agent ~* '(DoCoMo|J-PHONE|Vodafone|MOT-|UP\.Browser|DDIPOCKET|ASTEL|PDXGW|Palmscape|Xiino|sharp pda browser|Windows CE|L-mode|WILLCOM|SoftBank|Semulator|Vemulator|J-EMULATOR|emobile|mixi-mobile-converter)') {
                set $mobile 1;
            }
            if ($http_user_agent ~* '(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry)') {
                set $mobile 2;
            }
            if ($http_cookie ~* "comment_author_[^=]*=([^%]+)%7C|wordpress_logged_in_[^=]*=([^%]+)%7C") {
                set $do_not_cache 1;
            }
            proxy_no_cache     $do_not_cache;
            proxy_cache_bypass $do_not_cache;
            proxy_cache czone;
            proxy_cache_key "$scheme://$host$request_uri$is_args$args$mobile";
            proxy_cache_valid  200 301 302 10m;
            proxy_cache_valid  404 5m;
            proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
            proxy_pass http://backend;
            proxy_redirect http://example.com:8080/ /;
        }

        location ~ /purge(/.*) {
            allow 127.0.0.1;
            allow 192.0.2.1;
            deny all;
            proxy_cache_purge czone "$scheme://$host$1$is_args$args$mobile";
        }
    }

    server {
        listen       8080;
        server_name  example.com;

        location / {
            root   /var/www/html;
            index  index.html index.htm index.php;
        }

        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ /\.ht {
            deny  all;
        }
    }

    # Load config files from the /etc/nginx/conf.d directory
    include /etc/nginx/conf.d/*.conf;
}

この設定ファイルは以下のサーバ環境用に設定しています。サーバ環境に応じて適宜修正してください。

  • サーバの IP アドレス: 192.0.2.1
  • ホスト名: example.com
  • HTML ドキュメントルート: /var/www/html
  • リバースプロクシのポート: 80
  • バックエンドウェブサーバのポート: 8080
  • PHP FastCGI サーバのポート: 9000

ドキュメントルートに対して nginx ユーザーから読み込み権限が必要になります。WordPress を使用する場合ウェブディレクトリに対して書き込み権限も必要ですので、ドキュメントルートのオーナーを nginx ユーザー(FastCGI の実行ユーザー)に変更しておく方が良いかもしれません。


リバースプロクシのキャッシュを PC と携帯とスマートフォンで切り替える設定を入れています。不要な方は location / の設定を以下のように変更してください。Ktai StyleWPTouch を使う場合はそのままで。

        location / {
            proxy_no_cache     $do_not_cache;
            proxy_cache_bypass $do_not_cache;
            proxy_cache czone;
            proxy_cache_key "$scheme://$host$request_uri$is_args$args";
            proxy_cache_valid  200 301 302 10m;
            proxy_cache_valid  404 5m;
            proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
            proxy_pass http://backend;
            proxy_redirect http://example.com:8080/ /;
        }

設定ファイルを自分の環境用に書き換えたら nginx を動かします。

/etc/init.d/nginx start

この状態でブラウザからホストにアクセスすると 403 Forbidden が表示されると思います。

ドキュメントルートに空のファイルを作成し、ブラウザでアクセスできるか確認します。

cp /dev/null /var/www/html/index.html

同じく phpinfo を実行するスクリプトを作成し、ブラウザでアクセスできるか確認します。

echo '<?php phpinfo() ?>' > /var/www/html/phpinfo.php

動作が確認できたら index.html と phpinfo.php を削除し(残してても良いですけど)、chkconfig を実行してリブート時に nginx と PHP FastCGI サーバが起動するように設定します。

/sbin/chkconfig --level 345 nginx on
/sbin/chkconfig --level 345 php-fastcgi on

WordPress のインストール

PHP の動作が確認できれば、WordPress のインストール自体は Apache の場合とそれほど違いません。

まず VPS ですので mysql コマンドでデータベースを作ります。

CREATE DATABASE wordpress DEFAULT charset utf8;
GRANT ALL ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'password';

ja.wordpress.org から最新版の WordPress をダウンロードして /var/www/nginx に展開します。

cd /var/www/nginx
wget http://ja.wordpress.org/latest-ja.zip
unzip /tmp/latest-ja.zip
chown -R nginx:nginx wordpress

wordpress ディレクトリの wp-config-sample.php を wp-config.php にコピーし、

cd wordpress
cp wp-config-sample.php wp-config.php

wp-config.php にデータベース設定と FS_METHOD を追加します。FS_METHOD を direct にすると、WordPress プラグインなどのダウンロード時に ftp を使用せず PHP スクリプトから直接ダウンロードするようになります。必須ではありませんが、VPS で ftp の設定をわざわざするのも面倒なので付けてます。

define('DB_NAME', 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'password');
define('FS_METHOD', 'direct');

WordPress の設定が終わったら、ブラウザでアクセスする前に、/wordpress/wp-admin へのアクセスをキャッシュしないよう nginx.conf のリバースプロクシの設定を変更します。(この修正を入れた nginx.conf を nginx-wordpress.conf に置いています。)

    server {
        listen       80;
        server_name  example.com;

        location /wordpress/wp-admin/ {
            proxy_pass http://backend;
        }

        location / {

nginx.conf を修正したらリブートします。

/etc/init.d/nginx restart

これでブラウザから http://example.com/wordpress/ などのインストールした URL にアクセスすると WordPress のインストーラが立ち上がります。


パーマリンクの変更

パーマリンクを /wordpress/archives/1 等の形式に変更する場合、WordPress の設定を変える前に nginx.conf のバックエンドサーバの設定を変更する必要があります。

WordPress のインストール先が /wordpress/ で、/wordpress/ 以下のみを WordPress として運用する場合(トップページを WordPress に割り当てない)は、以下のように nginx.conf の location / に if (!-f $request_filename) { } を加え、location /wordpress を加えます。

    server {
        listen       8080;
        server_name  example.com;

        location / {
            root   /var/www/nginx;
            index  index.html index.htm index.php;
            if (-f $request_filename) {
                break;
            }
        }

        location /wordpress {
            root   /var/www/nginx;
            index  index.html index.htm index.php;
            if (!-e $request_filename) {
                rewrite ^(.+)$  /wordpress/index.php?q=$1 last;
            }
        }

設定を変更したら nginx をリブートします。

/etc/init.d/nginx restart

nginx をリブートしたら WordPress のパーマリンク設定を変更します。


パーマリンクの変更(WordPress ディレクトリとは別のディレクトリにサイトのホームページを設定する場合)

なにを言ってるかよく分からないかもしれませんが、WordPress の一般設定で以下のキャプチャのように WordPress のアドレス (URL) とサイトのアドレス (URL) を変えた場合に、パーマリンクの変更を行うための設定方法です。

この設定を行う場合、まず wordpress/index.php をコピーして HTML ドキュメントルートに index.php を作ります。

cd /var/www/html
cp wordprses/index.php index.php

コピーした index.php の require 部分を以下のように書き換えます。

require('./wordpress/wp-blog-header.php');

nginx.conf のバックエンドサーバの設定を書き換えてから、nginx をリブートします。

    server {
        listen       8080;
        server_name  example.com;

        location / {
            root   /var/www/nginx;
            index  index.html index.htm index.php;
            if (-f $request_filename) {
                break;
            }
            if (!-e $request_filename) {
                rewrite ^(.+)$  /index.php?q=$1 last;
            }
        }

nginx をリブートが完了したら WordPress のパーマリンク設定を変更してください。

Nginx Proxy Cache Purge WordPress プラグインのインストール

WordPress のインスコが終わったら Nginx Proxy Cache Purge WordPress プラグインを入れます。普通に WordPress のダッシュボードからインスコしてください。

このプラグインを入れると、記事を更新した際に nginx のキャッシュがパルスのファルシのルシがパージされるようになります。このプラグインを入れないと nginx のキャッシュタイムアウトまでの間(上の設定だと10分)古い内容で表示されることになりますので、nginx でリバースプロクシ立てたサイトで WordPress を動かすときは一緒にインスコしておいた方が良いです。

ちなみにこのプラグイン、パージ URL が /purge/* 固定(上の nginx の設定はこれに合わせています)でソースコード中にハードコーディングされていますので、パージ URLを変更したい場合はプラグインのソースを書き換える必要があります。上の nginx の設定例ではパージ URL を /purge にしてますので書き換えなくても問題ありませんが、変更したい場合はちょっと不便かもです。

nginx purge とかで WordPress プラグインを検索すると、他にも nginx のキャッシュをパージするためのエナがチャンガしてるプラグインが何個かありますので、他に良さげなのがあればそちらをどうぞ。

ちなみに、リバースプロクシでキャッシュしている場合は WP Super Cache 等のキャッシュプラグインは要りませんので、他のサイトから移行してきた場合キャッシュ関係のプラグインは無効または削除した方が良いと思います。

ベンチマーク

画竜点睛を欠くふいんき(なぜかry)でしたので、さくら VPS 512 上で httperf でWordPress のベンチマークを取ってみました。ついでにさくらスタンダードの WordPress に対してもベンチマークを取っていますが、こちらはサーバ環境が違いすぎるのであくまでも参考値ということで。

VPS の Apache はほぼデフォルトの設定/VPS の nginx はリバースプロクシありの設定ですので、ぶっちゃけフェアな比較ではありませんがまあこんなもんだと思います。(Apache の mod_cache を有効にするとか性能的な対策が可能ですが、別の VPS 鯖で mod_cache 入れたら過負荷になったときにサーバが落ちた(入れる前は過負荷でも落ちなかった)のでピーク時性能についてはどっちもどっちだと思います。まあ細かいことを言い出したらキリが無いので別の条件でベンチ取りたい人はよろしく〜(^o^)/)


まず最初のグラフは1秒あたりのサーバが返したレスポンス数です。

グラフのY軸がレスポンス数/秒、X軸が1秒あたりにクライアントから同時に発生したリクエスト数です。

nginx が nginx の WordPress トップページに対するベンチマーク、apache(VPS) が VPS 上で動かした Apache の WordPress トップページに対するベンチマーク、apache(STD) がさくらスタンダード上(の Apache)で動かした WordPress トップページに対するベンチマークの値です。

一個だけ見てもよく分からない部分が多々ありますので先にグラフを全部貼ります。


次のグラフは正常に完了したリクエストのレスポンスタイム(ミリ秒)です。

同時リクエスト数 70 〜 80 の間で Apache (VPS) のレスポンスタイムが 0 になっているのは、次のグラフのとおりサーバが落ちていたためです。


最後のグラフはエラーが返された数です。

Apache (VPS) では、リクエスト数(X軸)が70と80の時にエラーが70と80返されています。ベンチマークのリクエストが50を越えたあたりからサーバが処理しきれなくなって、70 〜 80 の間完全に落ちた状態となり、(このベンチマークは連続して行いましたので)90ぐらいから先に送ったリクエストが(タイムアウトなどで)終了し始め、100リクエストのころにはちょっと回復していた感じになっています。

Apache (STD) が微妙にエラーを出してるのは、アクセス制御用のモジュールを入れているからだと思いますが、自分で設定したサーバでは無いので詳細は不明です。


以上から、

  • nginx: 25 〜 44 リクエスト/秒のスループットで、同時リクエスト数が 60 を越えたあたりからレスポンスタイムが悪化(最高値 720.2 ms)、同時リクエスト数が 90 を越えたあたりからエラーが出始める。
  • Apache (VPS): 13 〜 24 リクエスト/秒のスループットで、同時リクエスト数が 20 を越えたあたりからレスポンスタイムが悪化(最高値 3643.2 ms)、同時リクエスト数が 50 を越えたあたりからエラーが出始め、一時完全に落ちた。
  • Apache (STD): 18 〜 30 リクエスト/秒のスループットで、レスポンスタイムは線形に悪化していないので詳細不明、割とすぐにエラーを返し始める。共有サーバだし詳細もよく分からんのでご勘弁を。

みたいな感じだと思います。

とりあえず VPS で WordPress を動かすなら nginx 使う方が良い(*´・ω・)(・ω・`*)ネー、って結果でした。

VPS についてはベンチマーク中に Load Average も計ってたんですが、nginx の最高値が 0.14、Apache の最高値が 132.56 でした。お話にならんって感じです。

VPS サーバで一番メモリを使ってるのは MySQL サーバですので、ここをチューニングするとさらに速くできるかも、です。
nginx のキャッシュに memcached を使ったりもできるのですが、さくら VPS 512 にデータベースやらなんやら全部置いててメモリ的に厳しいので今のところパスしてます。

こちらの記事によると別の VPS に DB サーバを立てたりしてもおkみたいですので、チューニングの余地は結構ある感じです。
さくらクラウドで動かすのもいいかもしれませんねー。


てことで、WordPress が重い重い言ってる人は nginx に乗り換えチャイナYOU!

参考サイト

最後に sakuratan.biz を nginx に移行する際に参考にしたページのリンクを貼っときます。この記事のとおり作業してみたけど何かうまくいかないって時は以下のサイトに解決方法があると思います。

80件のコメント

  1. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず [...]

  2. [...] 説が丁寧でわかりやすかったです。 さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず さくらvpsをデフォルトのcentosで使 [...]

    ピンバック by さくらVPS+ubuntu+wordpressにnginx入れたメモ | tjun memo — 2011 年 9 月 19 日 @ 22:42
  3. [...] nginxのproxy cacheはdogmap.jpかさくらたんどっとび〜ずを見れば設定できると思います。今回は2番目のCDN導入ですね。 [...]

  4. [...] [...]

  5. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず. [...]

  6. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) [...]

    ピンバック by Nginxでリバースプロキシを設定する | 9ensanのLifeHack — 2012 年 1 月 18 日 @ 19:33
  7. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き)  [...]

  8. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず [...]

  9. [...] 。 ただ、以下のリンクにインストール方法が記載していたので、こちらにしたがって、進めた。 さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) [...]

  10. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず [...]

    ピンバック by ImpArt » サーバ移行 — 2012 年 7 月 31 日 @ 16:09
  11. [...] [...]

    ピンバック by WordPressを高速化する9つのステップ | PLUS — 2012 年 8 月 26 日 @ 17:08
  12. [...] が増えてくるとパフォーマンスが悪くなるというのを、このNginxではある手法で解決しているようです。細かいことはこちらのサイトで詳しく解説されているので確認しておきましょう。 [...]

    ピンバック by サーバーを構築する | りんごの創り方 — 2012 年 10 月 9 日 @ 12:41
  13. [...] 上記の他にもNginxによるProxy Cacheや先述したMemcachedなど、WordPressに限らずWebサイト全般で使えるキャッシュ技術があります。こういうのはサーバにミドルウェアをインストールして使うの [...]

    ピンバック by ほんとうは怖いWP Super Cacheの話 | 高橋文樹.com — 2012 年 10 月 10 日 @ 10:49
  14. [...] ☆参考サイト☆ さくらたんどっとびーず さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) [...]

  15. [...] さくらたんどっとびーず さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) [...]

  16. [...]  http://sakuratan.biz/archives/4582 [...]

  17. [...] リバースプロクシの仕組みを構築するらしいです(さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き))。記事では概念からコマンドやベンチマークま [...]

  18. [...] [...]

  19. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き [...]

    ピンバック by ここをnginx+php-fpmにしてみた | まなドット — 2013 年 4 月 15 日 @ 09:43
  20. [...] Shared さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず. [...]

    ピンバック by Daily Digest for 2013/05/10 — 2013 年 5 月 11 日 @ 08:06
  21. Whats wrong with it.

    コメント by google — 2013 年 5 月 25 日 @ 00:19
  22. メンズ水着画像

    コメント by ラルフローレンローレ — 2013 年 7 月 31 日 @ 13:19
  23. prada サイフ

    コメント by ラッシュガード クイックシルバー — 2013 年 9 月 9 日 @ 15:14
  24. ロレックス スーパーコピー
    腕時計ブランド一覧 http://www.do63.com/

    コメント by 腕時計ブランド一覧 — 2013 年 10 月 18 日 @ 13:20
  25. I head
    マイケルコース/Michael Kors MK5354 – Parker Chronograph Gold IP http://www.emcasaimoveis.com.br/index/UN6/markbymarkjacob-index.html

  26. Rims
    フランク?ミュラー FRANCK MULLER ロングアイランド デイト 1200SCDT FRANCK MULLER Long Island Date http://www.apinep.com.br/data/2G4/FranckMuller-index.html

  27. RIFLE
    ANNA SUI/アナスイ/ハンドバッグ/レディース http://www.academiacoliseum.esp.br/index/2014-4/KI8/ANNASUI-index.html

    コメント by ANNA SUI/アナスイ/ハンドバッグ/レディース — 2014 年 4 月 23 日 @ 16:32
  28. Pull the plow
    ◆アイザック バレンチノ IZAX VALENTINO クオーツ メンズ 腕時計 IVG-4800-3◆ http://www.mailsend.com.br/index/YA9/index.html

  29. Sweet pea flowers
    コーチCOACHバッグ アウトレット ブランド COACHコーチ ショルダーバッグ F49148 SKHVR パーカー シグネチャー スウィングパック http://www.standmix.com.br/file/F4E/cocha-index.html

  30. Primary output
    限定セール!【Michael Kors】マイケルコース ファッション ハンドバッグ トートバッグ ショルダーバッグ E16 http://www.dariomassimoto.com.br/index/Q8P/markbymarkjacob-index.html

  31. Out by the government has
    アナスイ 2つ折財布 エルダー http://www.ferticampo.com.br/index/MQB/ANNASUI-index.html

    コメント by アナスイ 2つ折財布 エルダー — 2014 年 4 月 25 日 @ 13:34
  32. A great businessman is only as great as his visionwhat is the dif ralph lauren ference between an average point guard and a great point guard?For me,Paul smith polo cheap, i found an organization that security4you tbmjh fits my philosophy and that is very prudent in spending the donors money.This will make sure that the use of these words will become second nature to you. “He is set to do a film for the great french ralph lauren outlet director,Burberry polo sale, alain resnais in paris this jun

    コメント by http://www.kontrabandcontent.co.uk/ — 2014 年 6 月 22 日 @ 19:09
  33. [...] [...]

  34. ブランドコピー品通販店、最高品質の偽物ブランドコピー激安専門店!スーパーコピーブランドN級品販売。http://www.musa-web.net/javascript_javascript.html

    コメント by スーパーコピーブランド激安市場 — 2014 年 10 月 13 日 @ 11:19
  35. [...] もう少しココでも読んで、基本から勉強しよう。 [...]

  36. [...] さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず [...]

  37. Hurrah! After all I got a website from where I be able to actually obtain helpful information regarding my study and knowledge.

    コメント by เครื่องเล่น mp3 — 2015 年 2 月 28 日 @ 09:59
  38. Plenty of individuals may benefit from your writing. Many thanks!

    コメント by giant discounts and coupons — 2015 年 4 月 26 日 @ 09:16
  39. Rearmed focuses on Spencer’s grappling hook,
    which he uses to swing from one platform to another. All gamers will agree that there is lots of online games to experiment with that you will never
    lose interest playing. Available for i – Phone and Android,
    Parallel Kingdom is perhaps the first GPS-based MMORPG title,
    using the global positioning technology to
    center the map on the player’s location and allow them to explore.

    コメント by hack — 2015 年 4 月 27 日 @ 09:53
  40. Reed bed technology has a low price of entry and minimal daily functional and upkeep costs.
    But make sure that you consider the style your home is built with.
    Today there are various insulation materials that
    are used directly over the exterior of the tire
    before the finish is applied.

    コメント by byol77.digartfolio.pl — 2015 年 6 月 16 日 @ 10:07
  41. Also, you should start with a low dosage and work your way up.
    In fact the height of a teenager increases dramatically.

    ‘Were the supplements tested independently for purity and strength.

    コメント by Hilda — 2015 年 7 月 2 日 @ 21:40
  42. Most people would like natural instead of synthetic vitamins.
    Not only does it help to increase size and strength, it
    also contributes tremendously to increasing lean muscle mass and gain. What’s more, the
    global supplement market is worth close to $70 billion according
    to research from Euromonitor.

    コメント by http://www.dklkj.com/comment/html/?1135.html — 2015 年 7 月 7 日 @ 14:33
  43. If you would like to increase your knowledge only keep visiting this website and be updated with the most up-to-date information posted here.

    コメント by Gretta — 2016 年 2 月 21 日 @ 02:47
  44. [...] こうやってやるのですが、同時アクセス1,000を超えるとサーバスペックを問われる感じがしました。ちゃんとした人がやればさくらVPS512で、Yahoo!砲食らっても WordPress を平常運転らしいの [...]

  45. Hello to every body, it’s my first visit of this web site; this blog carries awesome and in fact good
    material designed for readers.

    コメント by camevent.com — 2016 年 4 月 26 日 @ 22:03
  46. I second Short History of Nearly Everything, it’s a truly delightful I find Pollan a bit dry, to be honest, but he has valuable Napoleon’s Buttons by Penny Le Couteur is an engaging

    コメント by invitaciones para quinceanera en espanol — 2016 年 8 月 3 日 @ 03:27
  47. クリバースを探して気づいたこと。通信販売放送で取り扱っている品は全部ネットで入手できることではない。通信販売放送で通信販売放送終わりから30分以内特定の特権は、ネットショッピングの際、四六時中履行されている。

    コメント by クリバース — 2016 年 9 月 6 日 @ 09:37
  48. 歯のホワイトニングでお悩みではないですか?
    人のファーストインプレッションは、歯がキレイか汚いかで左右されることがあります。
    それほど、歯が白いか黄色いかは大切なのです。

    ヨーロッパでは、日本以上に歯のホワイトニングを重要視しています。
    歯の白い人はやり手の人。歯の黄ばんでいる人は冴えないビジネスマン/ビジネスウーマン。
    ハッキリとそう決めつけられてしまうようです。

    日本では、そこまでではないけれど、背が高くて美人でいつも憧れの的だった人が、笑った時にちらっと見えた歯が茶色く黄ばんでいたらどうします?
    一気にそれまでの良い印象が、悪い印象に変わってしまいませんか|わないでしょうか?

    昔流行った「芸能人は歯が命(いのち)」
    芸能人でなくても、歯は重要です。
    アナタも歯のホワイトニングはじめてみては?

    コメント by 歯 ホワイトニング — 2016 年 12 月 26 日 @ 15:00
  49. どうもです~
    わたしも日々痩せるように試してきたんですが、そこだけのあと3kgが痩せない・・・。
    でも最近いい健康食品が通販されてきているので、
    買って飲んでみたんですがいきなりいい感じなんです。

    コメント by あと3kg痩せるには — 2017 年 1 月 10 日 @ 17:22
  50. I am continually searching online for tips that can help me.
    Thank you!

    コメント by Devin — 2017 年 8 月 19 日 @ 14:22
  51. Yes! Finally something about push mower.

    コメント by lawnboy 10730 — 2018 年 3 月 29 日 @ 11:48
  52. This post will assist the internet viewers for building up new webpage or even a blog from start to end.

    コメント by http://turvenner.net/listing/tikal-guatemala/ — 2018 年 5 月 18 日 @ 10:32
  53. If you would like to take a good deal from this paragraph then you have to apply these methods to your won webpage.

    コメント by http://suckhoenamkhoa.com/ — 2018 年 6 月 30 日 @ 09:49
  54. Good write-up. I certainly love this website.
    Thanks!

    コメント by teamapfel — 2018 年 7 月 24 日 @ 09:17
  55. Right now it looks like Drupal is the best blogging platform out there right
    now. (from what I’ve read) Is that what you are using on your blog?

    コメント by tire brand — 2018 年 8 月 24 日 @ 02:00
  56. There is a lesser amount of chance that this balloon is going to crash if
    it is well maintained. You can have maximum enjoyments inside the beach and waters and are available to the
    cruise to possess your scrumptious lunch. Therefore, it’s comes not hard for you
    to taste that which you much like the most

    コメント by Game Kartu Online — 2018 年 12 月 29 日 @ 22:39
  57. hi!,I love your writing so much! proportion we keep in touch more about your post on AOL?
    I require an expert on this space to resolve my problem.
    May be that’s you! Having a look forward to see you.

  58. Hi there to all, the contents existing at this site are genuinely awesome
    for people knowledge, well, keep up the good work fellows.

    コメント by toyota hai duong — 2019 年 6 月 17 日 @ 13:19
  59. Howdy very nice site!! Guy .. Beautiful .. Amazing ..
    I’ll bookmark your site and take the feeds additionally?
    I am happy to search out so many helpful information right here within the post, we need develop extra
    techniques on this regard, thank you for sharing. . . .
    . .

    コメント by https://www.linkedin.com/pulse/kham-phu-khoa-o-dau-tot-anh-duc/ — 2019 年 8 月 22 日 @ 19:11
  60. What you said was very logical. But, think about this,
    suppose you were to write a awesome post title? I am not saying your content is not solid, but suppose you added something that grabbed people’s
    attention? I mean さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず is kinda plain. You ought to glance at Yahoo’s front page and note how they
    create news titles to grab people interested. You might add a video or a related pic or two to
    grab people interested about everything’ve written. In my opinion, it might make your website a little bit more interesting.

  61. Hello, its pleasant piece of writing on the topic of media print, we all be
    aware of media is a great source of data.

    コメント by Sửa khóa tại nhà — 2019 年 11 月 16 日 @ 04:46
  62. Are you trying to find powerful online promotion that has no per click costs and will get you new customers fast? Sorry to bug you on your contact form but actually that was the whole point. We can send your advertising message to sites via their contact pages just like you’re receiving this note right now. You can specify targets by keyword or just execute bulk blasts to sites in the country of your choice. So let’s say you want to blast a message to all the interior decorators in the US, we’ll scrape websites for just those and post your ad text to them. Providing you’re advertising some kind of offer that’s relevant to that niche then your business will get awesome results!

    Write a quick note to alfred3545will@gmail.com to find out more info and pricing

    コメント by Michelle Treadwell — 2020 年 1 月 19 日 @ 05:46
  63. Stem cell therapy has proven itself to be one of the most effective treatments for Parkinson’s Disease. IMC is the leader in stem cell therapies in Mexico. For more information on how we can treat Parkinson’s Disease please visit:
    https://bit.ly/parkinson-integramedicalcenter

    コメント by Tammie Ratten — 2020 年 6 月 10 日 @ 17:06
  64. Quit paying tons of cash for expensive Google ads! I have a platform that requires only a minute bit of money and produces an almost endless amount of web visitors to your website

    Take a look at: https://bit.ly/free-visitors-forever

    コメント by Stephan Board — 2020 年 7 月 7 日 @ 11:50
  65. Very well done & written my friend!
    I began writing a blog recently and realised many articles simply rehash old content but add very
    little of worth.It’s terrific to read an insightful article oof
    sme acdtual value too your followers and myself.
    It’s on my list oof things I need to repllicate as a new blogger.
    Audience engagement and material value are king.
    Many wonderful ideas; you have definitely got on my list of
    blogs to follow!

    Carry on the great work!
    Well done,
    Lynn

    コメント by Unlock Zone — 2020 年 9 月 21 日 @ 11:44
  66. Did you know that notes like these that come through your website’s contact page can actually be an excellent way to get more visitors and sales for your site? How can we do it? Easy, we create an ad message like this one for your business and we mass post it to tons of website contact pages on any website and in any business category or area you need. Do these types of ads work? You’re living proof that they do since you’re reading this message right now The awesome thing is, this doesn’t cost more than $3 a day! Want more info? drop us a line vie email here: HansenAndyc65833@gmail.com

    コメント by Denny Mccloud — 2020 年 12 月 25 日 @ 21:14
  67. It’s hard to come by well-informed people on this subject,
    but you sound like you know what you’re talking about! Thanks

    コメント by http://start7.increasedadrtf.com/ — 2020 年 12 月 28 日 @ 02:25
  68. If you are going for best contents like me, just pay a visit this web page every day because it provides
    quality contents, thanks

    コメント by http://start4.increasedadrtf.com/ — 2021 年 1 月 3 日 @ 23:16
  69. Promote your website, e-commerce site, local business, or blog without paying a dime. This post examines 5 different methods to get lots of free ad exposure for your business: https://bit.ly/5waystoadvertisefree

    コメント by Iva McHale — 2021 年 1 月 6 日 @ 16:11
  70. Want to find out how you can get free traffic for your website? Let me show you five high volume traffic sites where you can promote your site without paying a penny: https://bit.ly/free-traffic-and-sales

    コメント by Michell Loureiro — 2021 年 1 月 7 日 @ 08:11
  71. I am continually looking online for tips that can assist me.
    Thanks!

    コメント by Styphdxfirol — 2021 年 1 月 29 日 @ 07:06
  72. Very interesting topic, regards for posting.

    コメント by Green Dolphin CBD — 2021 年 10 月 26 日 @ 07:11
  73. Thanks designed for sharing such a good thought,
    post is good, thats why i have read it fully

    コメント by Green Dolphin CBD Review — 2021 年 10 月 26 日 @ 07:15
  74. What’s up to every , as I am really eager of reading this web site’s post to be updated regularly.

    It includes fastidious information.

    コメント by Green Dolphin CBD Gummies Review — 2021 年 10 月 26 日 @ 08:30
  75. AMBBET SLOTเกมออนไลน์หรือสล็อตออนไลน์ที่ทุกท่านเล่นได้กับสล็อตไม่ผ่านเอเย่นต์ เพื่อหารายได้ เพียงแค่มีคอมพิวเตอร์หรือโทรศัพท์ทุกท่านสามารถเล่นได้ตลอด 24 ชั่วโมง โดยทางค่ายSLOT AMBได้วางแบบมาได้อย่างดีมีสีสัน จัดเต้มไปด้วยกราฟฟิคแน่นๆโดยมีให้เล่นมากว่า300เกมส์ และมากมาายหลายรูปแบบ ซึ่งเรามีระบบฝาก-ถอน ออโต้รวดเร็วทันที่สุดและทันสมัยที่สุด
    ถ้าท่านกำลังมองหาเว็บใหญ่สล็อต เราคือเว็บไซต์ที่ยอดเยี่ยมในไทย สามารถเข้ามาเล่นฟรีๆได้อีกด้วย จากระบบสล็อตทดลองเล่น เล่นเก่งแล้วค่อยมาลงเงินเดิมพันจริง
    หรือทุนหลักร้อยนั้นก็สามารถเพิ่มเงินทุนได้กับโปรสล็อตออนไลน์ที่ไม่ว่าจะเป็นสมาชิกใหม่รับเครดิตฟรี 50%
    และอื่นๆอีกมากมาย ทาง
    ambbet.com นั้นไม่ได้มีแค่เกมสล็อตเพียงอย่างเดียว เรายังเป็นเว็บพนันออนไลน์เว็บตรง ที่มีการเดิมพันกีฬาฟุตบอลจากลีกชั้นนำทั่วทั้งโลก และรวมทั้งบอลรายการต่างๆมาก ที่เปิดให้คุณมาเพลิดเพลินมากยิ่งกว่าทุกหนทุกแห่งหรือจะเป็นไฮโลเรามีให้เล่นหมดทุกอย่าง ครบวงจรในที่เดียว เราถูกการันตีจากนักพนันว่าเป็นเว็บสล็อตแตกง่ายที่จ่ายเงินจริงไม่มีประวัติโกง อีกทั้งยังไม่มีตัวกลางหรือเอเย่นต์อีกด้วย มาเป็นคนมั่งคั่งกันได้แล้ววันนี้ เพียงแค่สมัครสมาชิกเว็บสล็อตกับ ambbet.com เว็บตรงไม่ผ่านเอเย่นต์ที่มาแรงที่สุดในปีนี้ askmebet (ambbet.fun)

    コメント by ambbet.fun — 2022 年 3 月 13 日 @ 05:44
  76. I became honored to get a call from a friend when he found the important points shared on the site.

    Looking at your blog article is a real amazing experience.
    Thank you for taking into account readers like me, and I hope for you the
    best of success as a professional in this field.

    コメント by Shredded Keto BHB Review — 2022 年 3 月 21 日 @ 03:41
  77. สล็อตแตกหนัก 2021 ของเรา ได้เปิดให้บริการ เกมสล็อตออนไลน์ จากค่ายดัง เกมสล็อตออนไลน์ 2021 มาพร้อมระบบและบริการดีๆต่างๆมากมาย เช่น ระบบ ฝากเงิน
    ผ่าน ระบบ อัตโนมัติ ภายใน 45 วินาที ไม่ต้องแจ้งแอดมิน ไม่มีขั้นต่ำ ฝาก-ถอน 1 บาทก็ฝากได้ มี บทความสล็อต
    , วิธีการเล่น , แนะนำเกมสล็อตออนไลน์ และ สูตรสล็อตออนไลน์ สมัครสมาชิก ในเวลานี้ รับโบนัส 100% พร้อมลุ้นรับ แจกฟรีเครดิต สูงถึง 10,000 บาท สล็อตแตกหนัก โบนัสแตกหนัก แตกบ่อย มากกว่า 3,000 เกม เปิดให้บริการบน เว็บใหญ่สล็อต ของเรา ตลอด 24 ชั่วโมง ทุนหลักร้อย ผลกำไรหลักหมื่น เกมสล็อต
    ยอดฮิต 2021 อัพเดทใหม่ทุกวัน เว็บใหญ่สล็อต ที่มีความเสถียรสูง ไม่หลุด ไม่กระตุก เพลิดเพลินกับการเล่น Slot Game จากค่ายดัง
    เกมสล็อตออนไลน์ 2021
    ได้อย่างเพลินใจที่ เว็บหลักสล็อต ของเรา
    ได้เปิดให้บริการ เกมสล็อตออนไลน์ ที่ดีที่สุด
    สำหรับนักการพนัน ที่สนใจ Slot Online ทาง เว็บใหญ่สล็อต
    ยอดนิยม 2021 ของเรา ก็ได้เปิดให้บริการ เกมสล็อตออนไลน์
    จากค่ายดังสล็อต มากกว่า 3,000 เกม มาพร้อมระบบ ฝากเงิน ถอนเงิน ผ่าน ระบบ AUTO
    ช่วยให้ การฝากเงิน
    - ถอนเงิน ของท่าน มั่งคง รวดเร็วทันใจ ภายใน 1 นาที ฝาก-ถอน ไม่มีขั้นต่ำ 1 บาทก็ฝากได้ สมัครสมาชิก ตอนนี้ รับโบนัสทันที 50% พร้อมลุ้นรับ ฟรีเครดิต
    โบนัส SLOTPG

    コメント by โบนัส SLOTPG — 2022 年 3 月 27 日 @ 01:35
  78. Thanks for finally talking about > さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法(ベンチマーク付き) | さくらたんどっとびーず < Liked it!

    コメント by Gap Lowest — 2022 年 4 月 12 日 @ 06:10
  79. 18inch Doll Clothes and Accessories

    New Home Essentials Reusable Ice Cubes for Drinks-Kitchen gadgets best sellers 2023 “wwwsentro-knittingmachinecom_2023″ qooarker ice cube trays with lids can make reusable ice cubes easily for wine chiller,reusable juice box,fruit storage containers fo…

    トラックバック by 18inch Doll Clothes and Accessories — 2023 年 6 月 29 日 @ 08:18
  80. sentro 48 needle

    6.Reduced Hand Fatigue:”wwwsentro-knittingmachinecom_2024″ Machine knitting can be less physically demanding on the hands and wrists compared to extended periods of hand knitting.

    トラックバック by sentro 48 needle — 2023 年 9 月 30 日 @ 04:53

この投稿へのコメントの RSS フィード。 TrackBack URI

現在、コメントフォームは閉鎖中です。

Copyright © 2024 さくらたんどっとびーず | powered by WordPress with Barecity