WordPressを、nginxで超高速運用するための設定(お名前.comのVPS使用)

6月 10, 2013 by
Filed under: システム・ゲーム開発 


Nginx+php-fqm環境へ

さて、今回nkmr.bunrin.netドメインからota22.jpドメインに移るにあたって
WebサーバをApacheからnginxに切り替えました

ちなみにnginxとは「エンジンエックス」と読むらしいです。
Apacheよりも高速に動作し、これでWordpressを動かした日にはそれはもう素敵な事になると聞いていたので
早速導入してみました。

nkmr.bunrin.netでもなにげに全体のWebサーバ周りのチューニングや設定はぼちぼちやっていたので
その経験を活かせた…かどうかはわかりませんが(苦笑)

結果的に、Webページのスピードチェックサイト「GTmetrix」で測定してみたところ。

GTmetrixスコアA:Aきたー!

GTmetrixスコアA:Aきたー!

PageSpeed、YSlowのload speed1秒台、スコアはA:A判定達成しました!

…兎に角、新サーバでnginx+php-fqm+リバースプロキシでの運用がなんとか出来ましたので
その時の設定等、残すだけ残しておこうと思います。

ちなみにサーバはお名前.comのVPS(KVM)
OSは標準の「CentOS6.2 (64bit)」になります。

WordPressのバージョンは3.5.1
nginxのバージョンは1.4.1を使用しています。

PHPインストール

まずはPHPと一緒にAPCGD等のPHPライブラリを予めインストールしておきます。
GDやImageMagickまでは今はいらないんですが、後々画像圧縮を自前でしたくなった際
きっと幸せになれる予感がするので、今のうちにインストール。

remiリポジトリは予め追加。あって損はないですってかもはや必須ですねRemi…
他にも適時、必要と思われるモジュールを入れておきましょー

yum install php
yum install php-pecl-apc --enablerepo=remi
yum install php-gd --enablerepo=remi
yum install ImageMagick
nginxとphp-fpmをインストール

まずはnginxとphp-fpmをインストール。
特に悩むこと無く、yumで一発ヤムヤム様ァ…

yum install nginx
yum install php-fpm

自動起動の設定

chkconfig php-fpm on
chkconfig nginx on
設定ファイル
vi /etc/nginx/nginx.conf

 

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
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;
    #tcp_nopush     on;

    keepalive_timeout  5;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_http_version 1.0;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_disable "MSIE [1-6]\.";
    gzip_disable "Mozilla/4";
    gzip_proxied any;
    gzip_buffers 16 8k;

    include /etc/nginx/conf.d/*.conf;
}

worker_processesの値変更と、gzipの設定を追加した以外は特に大きく弄ってません。
本番はdefault.conf

vi /etc/nginx/conf.d/default.conf

 

root /var/www;
index index.php;

proxy_cache_path  /var/cache/nginx/cache1 levels=1 keys_zone=cache1:128m;
proxy_cache cache1;
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;
proxy_cache_valid 200 404 30m;

server {
        listen 80 default_server;
        gzip on;
        gzip_disable msie6;
        gzip_types text/css application/x-javascript;

        location ~ /\. {deny all; access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                log_not_found off;
                proxy_pass http://unix:/var/run/nginx.sock;
        }

        set $do_not_cache 0;
        if ($uri ~* "\.php$") {
                set $do_not_cache 1;
        }

        set $proxy_cache_key "$scheme://$host$request_uri";
        if ($http_user_agent ~* "iPhone") {
                set $do_not_cache 1;
                set $proxy_cache_key "iphone::$proxy_cache_key";
        }
        if ($http_user_agent ~* "Android") {
                set $do_not_cache 1;
                set $proxy_cache_key "android::$proxy_cache_key";
        }
        if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
                set $proxy_cache_key "$2::$proxy_cache_key";
        }

        location / {
                proxy_no_cache $do_not_cache;
                proxy_cache_bypass $do_not_cache;
                proxy_cache_key $proxy_cache_key;
                proxy_pass http://unix:/var/run/nginx.sock;
        }

}

server {
        listen unix:/var/run/nginx.sock;
        try_files $uri $uri/ /index.php;
        include /var/www/wordpress/nginx.conf;

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires 24h;
                log_not_found off;
        }

        location ~* \.php$ {
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

Webで調べた結果の良いとこ取りといってしまうと身も蓋も無いが…w
こんな感じに。
プロクシは8080ポートではなく、Unixドメインソケットを使っている。
expire周りはもっと調整の余地があるかも?
とりあえず運用しながら調整していこうと思います。

php-fpmの設定
vi /etc/php-fpm.d/www.conf

 

; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

とりあえず、ユーザーとグループ設定は、Nginxの方に合わせておきましょう。

pm = static

あと、php-fpmは放っておいたらメモリをバカスカ食うので
pm = dynamicの部分をstaticに変更してプロセス数を固定しておきましょう。

実際のプロセス数は、運用しながら見ていこうかと思います。
ちなみに今は2

いざ起動
/etc/init.d/php-fpm start
/etc/init.d/nginx start

起動後、ローカルからURLを叩いてNginxの画面が出たのでOK

WordPressの移動

WordPressをまるごとtarで固めて移動
/var/www/wordpress/ にまるっと展開した後、権限を設定し直します。
ここで権限設定しなおさないと、画像がアップロードできない等の問題が出ちゃいます。

chown -R nginx /var/www/wordpress

nginxのdefault.confのドキュメントルートも/var/www/wordpressに書き換えちゃいます。

あとは、データベースを元のDBからエクスポートし
新サーバでインポートします。まるっとコピーね。
この辺は、phpMyAdminでもあればGUIで全部出来ちゃいます。楽。

全部済んだらnginxを再起動して、表示と動作確認。

あと、キャッシュ周りがちょいと怪しいので…

全削除のスクリプトはここのリスト8を参考に全削除のバッチを緊急用に組んでみたり。
あとは、Nginx Cache Controllerプラグインを入れておけば良いでしょう。

後始末

旧ドメインの.htaccessで、301リダイレクトを全体に設定します。
旧ドメインに来た人は、容赦なく新ドメインに301リダイレクトさせます。飛んでけー飛んでこーい!

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(ota22\.jp)(:80)?
RewriteRule ^(.*) http://ota22.jp/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(nkmr\.bunrin\.net)(:80)?
RewriteRule ^(.*) http://ota22.jp/$1 [R=301,L]

そんな訳で無事起動、ついでにベンチマークも

とまあ、駆け足でしたが要所のみ抜粋するとこんなもんでした。
今は無事、新ドメイン・新サーバでWordpressが動いていますし
旧にアクセスした瞬間に、こっちに飛ばされるようになっていると思います。

あと折角なので、Wordpress方面もちょいちょいチューニングかまして作業は一旦終了。

この時点でやっとGTmetrixをA:A達成

以前がB:Cだった分、うん、これはかなり達成感…!


ブログランキング・にほんブログ村へ
にほんブログ村
↑1日1回、ランキングご協力頂けると励みになります。是非~♪

人気記事

【PHP】「Fatal error」なんて読む?
オタクな彼女と出会い、結婚するまでの経緯をまとめてみた #1 「結婚したい?」
オタクな彼女と出会い、結婚するまでの経緯をまとめてみた #2 「初対面」
オタクな彼女と出会い、結婚するまでの経緯をまとめてみた#3 部屋に来た→初音ミク→誕生日プレゼント
ソーシャルゲーム開発の実体験記 #1 ポチポチゲー開発実体験談

カテゴリ別最新記事

「俺屍2」について、自分なりに思う所を書いてみた

【fandub】アニソンのロシア語カバーが妙に色っぽい件

20140205-090722.jpg

ウェブマスターツールの読み方に対する盲点

水晶雫

当ブログは「CrystalDiskInfo」および「水晶雫」を全力で応援します

壮年夫婦

LUMIX G VARIO 45-200mm 作例

iPad用DAW「MusicStudio」

【ヲタ夫婦の日常】夫婦共に同人活動をしているとこうなる

20130626-111923.jpg

敏感肌スキンケアとは!?アルージェの乳液、化粧水を買ってみた

ドミネーター・両側のLED点灯

光って喋るドミネーター制作レポ #4 LED&配線作業

Comments

メールアドレスが公開されることはありません。