世界中でホームページを掲載するために一番使われている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日変わらなくなります。
[…] http://sakura.off-soft.net/centos/apache-nginx-7-basic-auth.html Basic認証について http://test.geekzshu.com/wordpress/1383 !-eについての説明 http://blog.monoweb.info/article/2010050317.html WP Super […]