当ブログはさくらインターネットのVPS(仮想専用サーバー)でCentOS 5を使っていますが、この度、Apache 2.2.3からnginx 1.6.2へ移行しました。
以下、nginx 1.6.2への移行手順です。
目次
version5.3系のPHPを削除してversion 5.4系のPHPをインストール
nginxをインストールするにあたり、事前にCentOS 5でインストールされているphpのバージョンを確認します。
1 2 3 4 5 6 7 8 9 |
# rpm -qa | grep php php53-mysql-5.3.3-26.el5_11 php53-5.3.3-26.el5_11 php53-common-5.3.3-26.el5_11 php53-devel-5.3.3-26.el5_11 php53-pdo-5.3.3-26.el5_11 php53-gd-5.3.3-26.el5_11 php53-cli-5.3.3-26.el5_11 php53-mbstring-5.3.3-26.el5_11 |
phpはversion5.3.3でした。
このバージョンに合うphp-fpmが存在しないようなので、インストールされているversion5.3.3のphpとその関連ソフトを削除して、代わりにversion5.4系のphpとその関連ソフトをインストールすることにします。
まず、version5.3.3系のphpとその関連ソフトを削除します。
1 2 3 4 5 6 7 8 9 10 |
# rpm -e php php-common php-cli # rpm -e php53-devel # rpm -e php53 # rpm -e php53-cli # rpm -e php53-mysql # rpm -e php53-mbstring # rpm -e php53-gd # rpm -e php53-pdo # rpm -e php53-common 警告: /etc/php.ini は /etc/php.ini.rpmsave として保存されました。 |
次に、version5.4系のphpとその関連ソフトをインストールします。
php54、php54-common、php54-cliのインストールは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# yum -y install php54 php54-common php54-cli Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * ius: ftp.neowiz.com * updates: ftp.iij.ad.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package php54.x86_64 0:5.4.34-1.ius.el5 set to be updated ---> Package php54-cli.x86_64 0:5.4.34-1.ius.el5 set to be updated --> Processing Dependency: libedit.so.0()(64bit) for package: php54-cli ---> Package php54-common.x86_64 0:5.4.34-1.ius.el5 set to be updated --> Running transaction check ---> Package libedit.x86_64 0:2.11-2.20080712cvs.el5 set to be updated --> Finished Dependency Resolution Dependencies Resolved ==================================================================================================================== Package Arch Version Repository Size ==================================================================================================================== Installing: php54 x86_64 5.4.34-1.ius.el5 ius 3.1 M php54-cli x86_64 5.4.34-1.ius.el5 ius 2.9 M php54-common x86_64 5.4.34-1.ius.el5 ius 1.0 M Installing for dependencies: libedit x86_64 2.11-2.20080712cvs.el5 epel 80 k Transaction Summary ==================================================================================================================== Install 4 Package(s) Upgrade 0 Package(s) Total size: 7.1 M Total download size: 7.1 M Downloading Packages: (1/3): php54-common-5.4.34-1.ius.el5.x86_64.rpm | 1.0 MB 00:40 (2/3): php54-cli-5.4.34-1.ius.el5.x86_64.rpm | 2.9 MB 02:09 (3/3): php54-5.4.34-1.ius.el5.x86_64.rpm | 3.1 MB 02:22 -------------------------------------------------------------------------------------------------------------------- Total 23 kB/s | 7.1 MB 05:14 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : php54-common 1/4 Installing : libedit 2/4 Installing : php54-cli 3/4 Installing : php54 4/4 Installed: php54.x86_64 0:5.4.34-1.ius.el5 php54-cli.x86_64 0:5.4.34-1.ius.el5 php54-common.x86_64 0:5.4.34-1.ius.el5 Dependency Installed: libedit.x86_64 0:2.11-2.20080712cvs.el5 Complete! |
php54-gd、php54-mbstring、php54-mysql、php54-pdoのインストールは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# yum -y install php54-gd php54-mbstring php54-mysql php54-pdo Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * ius: ftp.neowiz.com * updates: ftp.iij.ad.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package php54-gd.x86_64 0:5.4.34-1.ius.el5 set to be updated --> Processing Dependency: libt1.so.5()(64bit) for package: php54-gd ---> Package php54-mbstring.x86_64 0:5.4.34-1.ius.el5 set to be updated ---> Package php54-mysql.x86_64 0:5.4.34-1.ius.el5 set to be updated ---> Package php54-pdo.x86_64 0:5.4.34-1.ius.el5 set to be updated --> Running transaction check ---> Package t1lib.x86_64 0:5.1.1-9.el5 set to be updated --> Finished Dependency Resolution Dependencies Resolved ==================================================================================================================== Package Arch Version Repository Size ==================================================================================================================== Installing: php54-gd x86_64 5.4.34-1.ius.el5 ius 196 k php54-mbstring x86_64 5.4.34-1.ius.el5 ius 1.2 M php54-mysql x86_64 5.4.34-1.ius.el5 ius 162 k php54-pdo x86_64 5.4.34-1.ius.el5 ius 108 k Installing for dependencies: t1lib x86_64 5.1.1-9.el5 epel 208 k Transaction Summary ==================================================================================================================== Install 5 Package(s) Upgrade 0 Package(s) Total size: 1.8 M Total download size: 1.6 M Downloading Packages: (1/4): php54-pdo-5.4.34-1.ius.el5.x86_64.rpm | 108 kB 00:03 (2/4): php54-mysql-5.4.34-1.ius.el5.x86_64.rpm | 162 kB 00:06 (3/4): php54-gd-5.4.34-1.ius.el5.x86_64.rpm | 196 kB 00:07 (4/4): php54-mbstring-5.4.34-1.ius.el5.x86_64.rpm | 1.2 MB 00:45 -------------------------------------------------------------------------------------------------------------------- Total 26 kB/s | 1.6 MB 01:04 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : php54-pdo 1/5 Installing : t1lib 2/5 Installing : php54-mbstring 3/5 Installing : php54-gd 4/5 Installing : php54-mysql 5/5 Installed: php54-gd.x86_64 0:5.4.34-1.ius.el5 php54-mbstring.x86_64 0:5.4.34-1.ius.el5 php54-mysql.x86_64 0:5.4.34-1.ius.el5 php54-pdo.x86_64 0:5.4.34-1.ius.el5 Dependency Installed: t1lib.x86_64 0:5.1.1-9.el5 Complete! |
php54-fpmのインストールは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# yum -y install php54-fpm Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * ius: ftp.neowiz.com * updates: ftp.iij.ad.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package php54-fpm.x86_64 0:5.4.34-1.ius.el5 set to be updated --> Finished Dependency Resolution Dependencies Resolved ==================================================================================================================== Package Arch Version Repository Size ==================================================================================================================== Installing: php54-fpm x86_64 5.4.34-1.ius.el5 ius 1.5 M Transaction Summary ==================================================================================================================== Install 1 Package(s) Upgrade 0 Package(s) Total download size: 1.5 M Downloading Packages: php54-fpm-5.4.34-1.ius.el5.x86_64.rpm | 1.5 MB 00:56 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : php54-fpm 1/1 Installed: php54-fpm.x86_64 0:5.4.34-1.ius.el5 Complete! |
PHP、PHP-FPMの設定
phpのバージョンを確認します。
1 2 3 4 |
# php --version PHP 5.4.34 (cli) (built: Oct 20 2014 13:15:11) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies |
PHPのタイムゾーンを設定します。
/etc/php.iniを開いて、
date.timezone = “Asia/Tokyo”
と入力します。
1 2 3 4 5 |
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = date.timezone = "Asia/Tokyo" |
次に、php-fpmの設定を行います。
/etc/php-fpm.d/www.conf を開いて、
user、group、pm.max_requests
を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; 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 ・・・・・・・ ・・・・・・・ ; The number of requests each child process should execute before respawning. ; This can be useful to work around memory leaks in 3rd party libraries. For ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. ; Default Value: 0 pm.max_requests = 500 |
php-fpmをサービスに登録してから起動します。
1 2 3 4 5 |
(レベル2,3,4,5でphp-fpmをサービスに登録) # chkconfig --level 2345 php-fpm on (php-fpmをサービスで起動) # service php-fpm start |
特にエラーがなければphp-fpmはサービスに登録されて起動しました。
php-fpmはポート9000で待ち受け状態になっています。
念のために起動していることを確認します。
1 2 3 4 |
# telnet localhost 9000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. |
php-fpmが起動していることを確認することができました。
2014.11.20追記
どうもnginxが不安定というか、アクセス状態によりタイムアウトしてアクセスが返ってこないことがあるようです。
以下のようなエラーがerror.logに出されます。2014/11/15 23:24:00 [error] 18331#0: *2899 upstream timed out (110: Connection timed out) while reading response header from upstream, client: aaa.bbb.ccc.ddd, server: urashita.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "urashita.com"
そこで、/etc/php-fpm.dの設定で
pm.max_children = 300
pm.max_requests = 1000
として動作させています。
nginxのインストールと設定
デフォルトのCentOSではnginxのリポジトリを参照しておりません。
そのため、yumでnginxをインストールするには、
/etc/yum.repos.d/nginx.repo
というファイルを事前に作成します。
1 2 3 4 5 |
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 |
その後、nginxをインストールします。
1 |
# yum -y install nginx |
/etc/nginx/conf.d/wordpress.confというファイルを作成します。
ドメイン名をaaa.bbbとするとwordpress.confの中身は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
server { # サーバーのデフォルトTCPポートです。 listen 80; # サーバー名を設定します。 server_name aaa.bbb; # ドキュメントルートディレクトリを設定します。 root /var/www/wordpress; # index file タイプの優先順を設定します。 index index.php index.html index.htm; # ログファイル名を設定します。 access_log /var/log/nginx/aaa.bbb/access.log main; error_log /var/log/nginx/aaa.bbb/error.log warn; # Wordpress用のリダイレクト設定 # ファイルが存在しないURIの場合は、index.phpへ転送させる。 try_files $uri $uri/ /index.php?q=$uri&$args; # PHP FPM との接続を行うため 拡張子phpに対して処理します。 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } |
/var/log/nginx/aaa.bbbというフォルダをあらかじめ作成して権限を設定します。
1 2 3 4 5 |
(ログ用の/var/log/nginx/aaa.bbbというフォルダを作成) # mkdir /var/log/nginx/aaa.bbb (/var/log/nginx/aaa.bbbの権限をnginx:admに設定) # chown -R nginx:adm /var/log/nginx/aaa.bbb |
2014.11.20追記
/var/log/nginx/aaa.bbb以下にログを作成するようにすると、デフォルトではログのローテーションが行われなくなります。
ログのローテーションの設定は、/etc/logrotate.d/nginxに記述されています。
ログのローテーションを行うために、ログは/var/log/nginxの下に作成するようにします。
/etc/nginx/conf.d/wordpress.confの中で、以下のように修正しました。access_log /var/log/nginx/aaa.access.log main;
error_log /var/log/nginx/aaa.error.log warn;
Apacheの停止とnginxの起動
WordPressに管理者でログインして、キャッシュ系のプラグインのキャッシュファイルを削除して、キャッシュ系のプラグインを停止します。
キャッシュ系のプラグインが起動したり、キャッシュファイルが残っていると古い表示が残ったままになることがあるようです。
私の場合、WP Super CacheとDB Cache Reloaded Fixを動作させていたので、キャッシュファイルを削除してプラグインを停止しました。
/var/www/wordpressフォルダの権限を
nginx:adm
に変更します。
Apacheをサービスからオフにして、nginxをサービスに登録します。
そして、Apacheを停止してから、nginxを起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
(/var/www/wordpressの権限をnginx:admに変更) # chown -R nginx:adm /var/www/wordpress (Apacheをサービスからオフ) # chkconfig --level 2345 httpd off (nginxをサービスに登録) # chkconfig --level 2345 nginx on (Apacheの停止) # service httpd stop (nginxの起動) # service nginx start |
WordPressがブラウザから正しく表示されることを確認します。
Apacheからnginxに移行時に遭遇した様々なエラー対策
WordPressの画面が真っ白になった
WordPressのデバッグモードを使って原因を調べます。
デバッグモードにするにはwp-config.phpを以下のように変更します。
1 2 3 4 5 6 7 8 |
/** * 開発者へ: WordPress デバッグモード * * この値を true にすると、開発中に注意 (notice) を表示します。 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。 */ //define('WP_DEBUG', false); define('WP_DEBUG', true); |
デバッグモードにするとブラウザ画面にphpのログが表示されるようになります。
お使いのサーバーのPHPではWordPressに必要なMySQL拡張を利用できないようです。
ブラウザでこのようなメッセージが表示されたときは、php-mysqlなど必要なモジュールがすべてインストールされているかどうか確認が必要です。
Windows Live Writerで「このブログでは画像の投稿がサポートされていないため、以下の画像を投稿できません」
/var/www/wordpressフォルダの権限が
nginx:adm
となっているか確認が必要です。
Apacheからnginxへ移行時のスピード比較
Apache使用時とnginx使用時のabコマンドの結果は以下の通りです。
Apache(WordPressキャッシュ系プラグインあり)使用時
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# ab -c 100 -n 1000 'http://urashita.com/' This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking urashita.com (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache/2.2.3 Server Hostname: urashita.com Server Port: 80 Document Path: / Document Length: 38175 bytes Concurrency Level: 100 Time taken for tests: 9.856 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 38537000 bytes HTML transferred: 38175000 bytes Requests per second: 101.46 [#/sec] (mean) Time per request: 985.582 [ms] (mean) Time per request: 9.856 [ms] (mean, across all concurrent requests) Transfer rate: 3818.43 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 3 114 283.8 14 1024 Processing: 64 832 400.3 832 4217 Waiting: 18 661 308.4 678 2381 Total: 70 946 429.8 885 4271 Percentage of the requests served within a certain time (ms) 50% 885 66% 1054 75% 1245 80% 1316 90% 1427 95% 1595 98% 1805 99% 2252 100% 4271 (longest request) |
nginx(WordPressキャッシュ系プラグインなし)使用時
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# ab -c 100 -n 1000 'http://urashita.com/' This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking urashita.com (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: nginx/1.6.2 Server Hostname: urashita.com Server Port: 80 Document Path: / Document Length: 38175 bytes Concurrency Level: 100 Time taken for tests: 8.495 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 38460000 bytes HTML transferred: 38175000 bytes Requests per second: 117.72 [#/sec] (mean) Time per request: 849.465 [ms] (mean) Time per request: 8.495 [ms] (mean, across all concurrent requests) Transfer rate: 4421.44 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 4 66 284.9 20 3047 Processing: 112 729 284.2 751 4162 Waiting: 33 569 245.7 636 3517 Total: 191 795 389.7 765 4199 Percentage of the requests served within a certain time (ms) 50% 765 66% 807 75% 904 80% 1004 90% 1076 95% 1121 98% 1247 99% 3760 100% 4199 (longest request) |
キャッシュ系のプラグインを使っていないにも関わらず、nginxでは少し速くなっているようです。
次にUptime Robotで移行前、移行後の状況を確認します。
移行後は安定的にレスポンス時間が減っている(つまり、速くなった)ことが確認できました。
さくらのVPSサーバー
↓月額685円からの低価格&高パフォーマンスのVPS、さくらのVPSはコチラ
SSDプランが月々685円から使える!さくらのVPS
コメント