世界中でホームページを掲載するために一番使われている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 […]