さくらVPS Apacheからnginxに変更してみる

先日カーネルパニックになった「さくらVPS 1G」ですが、Apacheの設定も微妙というか、アクセス過多のようで、落ちまくり。
調整してみましたが上手くいかず、落ちまくり。
と、いうことでnginxに変更してみました。

Via:CentOSにNginx + php-fpmをInstall、設定してWordPressを動かす
Via:さくらの VPS に nginx を入れてリバースプロキシ設定するまでの作業メモ(検証用)

http://www.nginx.org/en/download.htmlでyumの設定があるので、repoを入れてからインストール。
CentOS6.2なので、こんな感じで。

# vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

# yum update
# yum install nginx

レポジトリを入れてからPHPのインストール(上書き)

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum --enablerepo=remi install php-cli php-devel php-mbstring php-mysql php-pear

php-fpmをインストール

yum --enablerepo=remi install php-fpm

spawn-fcgiをインストール

yum install spawn-fcgi

設定ファイルは参考サイトからコピーして入れました。

php-fpmを先に動かしてしまったので、「Address error」とか表示されてspawn-fcgiが動きませんでした。
php-fpmを先に起動した時は一度止めてから、spawn-fcgiの起動スクリプトを動かすと上手くいきます。

nginxの設定も参考サイトをまねてdefault.confを変更しました。
この状態でnginxを起動して表示確認するとMySQLが動いていないらしく、「データベースエラー」

mysqlをstartさせると、エラーになり起動しなくなりました。
/etc/my.cnfをチェックしたりしていたのですが、

grep ERROR /var/log/mysqld.log

でログをみると

/usr/libexec/mysqld: unknown variable 'default-character-set=utf8'

だそうです。
「default-character-set=utf8」は「character-set-server=utf8」に変わっているようで、変更したらあっさり起動しました。

表示確認すると、表示はされるものの「504 Gateway Time-out」でまともに動かないので
nginxの設定に

fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;

send_timeout 180;

を追加してタイムアウトまでの時間を長くしました。
これでようやくまともに表示できます。


WordPressのパーマリンク設定で「/archives/%post_id%.html」と設定しているのですが、.htaccessでのリライトが使えないnginxでは「.html」や「.php」の拡張子の付いたリンクは参考サイトの内容では設定できないようです。
このようなパーマリンクだと404になります。
「.html」を外したURLにしようかと思ったのですが、検索エンジンやブックマークのこともあるので、Googl検索。

Via:How to modify an url extension with a Nginx rewrite

location ~ \.html$ {
               # It stops if the url corresponds to a real .html file
                if (-f $request_filename) {
                expires 30d;
                break;
                }
                #if the file doesn't exists removes the .html extension and continues
                if (!-e $request_filename) {
                rewrite ^/(.*)\.html$ /$1 last;
                }
    }

nginxの設定ファイルに上記を追加。
「.html」を外してリクエストするというような処理になるようで、これだと元々のパーマリンクで表示されました。
もしかすると、「.html」なしのパーマリンクより処理時間が掛かるのかもしれません。

Apacheの時よりも気持ち軽くなったような気がします。
今回はプロキシやキャッシュの処理を省いているので、様子を見ながら追加しようかと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)