wordpressを早くするhttpサーバーnginx

世界中でホームページを掲載するために一番使われているhttpサーバーはapacheですが、最近急激に人気になっているhttpサーバーがあります。それがnginx(エンジンエックス)!
なんといっても軽量のため、CPUとメモリーの消費量を大幅に下げることができます。
特にCPUやメモリー量が少ないVPSサーバーを使っている場合は使うことでサーバー付加が少なくなります。
このサイトもnginxに以降しました。wordpressを使っているわりに軽快ではないでしょうか??

インストール方法(CentOS)

今回はCentOSへのnginxインストール方法を紹介していきます。

nginxとphp、FastCGIなどなどをインストール

新しいnginxをインストールできるように新しいphpが入っているパッケージのremiレポジトリを追加します。

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh http://yum.chrislea.com/centos/5/i386/chl-release-5-3.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CHL

yumを使って
・nginx
・php
・php-pgsql
・php-pecl-memcache
・fcgi
・spawn-fcgiのインストールを行います。

yum --enablerepo=remi install nginx php php-pgsql php-pecl-memcache fcgi spawn-fcgi

mysql のインストール

yumでそのままインスト-ルしたバージョンでは対応していないので、一番新しいバージョンをインストールします。

yum --enablerepo=remi,epel update mysql*
Error Summary
-------------

上記のようなエラーが出た場合はいったんmysqlを削除して

yum remove mysql

インストールしなおします。

yum --enablerepo=remi,epel install mysql
yum --enablerepo=remi,epel install mysql-server

次にphp-mysqlをインストールします。

yum --enablerepo=remi,epel install php-mysql

phpfcgiを作る

nginxでphpを起動させるためにFastCGIの設定を行います。

cd /etc/init.d/

起動するためのプログラムを作成します。
参考ページ
※nginxの公式サイトに記述してあります。

vi phpfcgi

で下記を記述して保存します。

#!/bin/bash
#
# Startup script for the PHP FastCGI server.
#
# chkconfig: 345 85 15
# description: PHP is an HTML-embedded scripting language
# processname: php
# config: /etc/php.ini
 
# Source function library.
. /etc/rc.d/init.d/functions
 
PHPFCGI="/usr/bin/php-cgi"
FCGIPORT="9000"
FCGIADDR="127.0.0.1"
FCGI_WEB_SERVER_ADDRS="127.0.0.1"
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000
ALLOWED_ENV="PATH USER"
PHPUSER=php
PIDFILE=/var/run/phpfcgi.pid
 
if [ -z "$PHP_FCGI_CHILDREN" ]; then
  PHP_FCGI_CHILDREN=5
fi
 
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN 
PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
 
case "$1" in
  start)
        PHPFCGI_START=$"Starting ${NAME} service: "
        echo -n $PHPFCGI_START
 
        # check for $PHPUSER, create if non-existent
        if [ -z "`id -u $PHPUSER 2> /dev/null`" ]; then
            useradd -s /sbin/nologin $PHPUSER
        fi
 
        # clean environment
        E=
        for i in $ALLOWED_ENV; do E="$E $i=${!i}"; done
        daemon --user $PHPUSER --pidfile $PIDFILE 
"env - $E $PHPFCGI -q -b $FCGIADDR:$FCGIPORT &> /dev/null &"
 
        pid=`pidof php-cgi`
        if [ -n "$pid" ]; then
            echo $pid > $PIDFILE
            success $PHPFCGI_START
        else
            failure $PHPFCGI_START
        fi
        echo
        ;;
  stop)
        echo -n "Stopping php-fcgi: "
        killproc -p $PIDFILE phpfcgi
        echo
        ;;
  status)
        status phpfcgi
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
esac
 
exit 0

nginx.confを書き換える

nginxの設定ファイルになります。apacheでいったら(httpd.conf)

vi /etc/nginx/nginx.conf
gzip  on;
server {
listen       80;
server_name www.example.com;
#charset koi8-r;
root /usr/share/nginx/html;
index index.php;
#access_log  logs/host.access.log  main;
location / {
    root /usr/share/nginx/html;
    index index.php ;
    if (!-e $request_filename){
        rewrite ^ /index.php last;
    }
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 location ~ .php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_script_name;
    include        fastcgi_params;
}
略
}

wordpressのrewriteの設定もしています。

if (!-e $request_filename){
         rewrite ^ /index.php last;
}

!-eはファイル、ディレクトリ、シンボリックリンクが指定したファイルではなかった場合、最後のURLをindex.phpに書き換えるという設定です。

server_name www.example.com example.com;

は自分のURLに書き換えてください。

nginxの起動を書き換える

vi /etc/init.d/nginx

で下記を記述して保存します。

#!/bin/sh
# chkconfig: 345 98 20
# description: Watch system status
# processname: hotsanic
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

test -x $DEAMON || exit 0

d_start(){
 $DAEMON || echo -n "already running"
}

d_stop(){
 $DAEMON -s quit || echo -n "not running"
}

d_reload(){
 $DAEMON -s reload || echo -n "could not reload"
}

case "$1" in
 start)
  echo -n "Starting $DESC: $NAME"
  d_start
  echo "."
 ;;
 stop)
  echo -n "Stopping $DESC: $NAME"
  d_stop
  echo "."
 ;;
 reload)
  echo -n "Reloading $DESC configuration..."
  d_reload
  echo "reloaded."
 ;;
 restart)
  echo -n "Restarting $DESC: $NAME"
  d_stop
  sleep 2
  d_start
  echo "."
 ;;
 *)
  echo "Usage: $SCRIPTNAME{start|stop|restart|reload}" >&2
  exit 3
 ;;
esac

exit 0

nginxとphpcgiを起動

nginxとFastCGIを起動させます。これで設定完了です。

/etc/init.d/phpfcgi start
/etc/init.d/nginx start

追加:APCをインストール

さらにWordpressを早くするためのphpモジュールをインストールします。
APCはPHPを中間コードにしてメモリ上にキャッシュし、高速化するモジュール
インストールに必要なライブラリをインストールします。

yum install php-devel --enablerepo=remi

peclを使ってAPCをインストールします。(※今までのをやっていたらインストールしています。)

pecl install APC

FastCGIを再起動させると

/etc/init.d/phpfcgi restart

これで完了です。

追記:wordpressの画像リサイズができない場合

GDが入っていない場合は

yum install GD

gdをphpで使えるようにphp-gdをインストールします。

yum install php-gd --enablerepo=remi

FastCGIを再起動させると

/etc/init.d/phpfcgi restart

これで完了です。

追記:nignxでexpiresの設定

一度ダウンロードしたデータを何度もダウンロードしないようにする設定です。
expiresの設定を行うことで、お客様の2ページ目や2回目のホームページへのアクセスを早くすることができます。
例えば、style.cssをアクセスするたびにダウンロードしたりなどなど…。

nginx.confの設定に追記してあげるだけです。

server{
…
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
            expires 1h;
      }
…
}
location ~ .php$ {
…
fastcgi_pass_header "X-Accel-Expires";
…

書き直したら、nginxをreloadしてあげてください。

expires 1hは1時間同じデータはダウンロードしないという設定です。
何日も変わらない場合は
例:expires 10d に設定すると10日変わらなくなります。


コメント
コメントする