さくらのVPS(CentOS)にnginxリバースプロキシを入れて高速化する方法

さくらのVPSの初期設定から、nginxを入れてリバースプロキシの設定をするまでの手順を(自分用に)まとめました。

今回最も参考になったのは以下の本です。nginx以外の高速化の手法も豊富でおすすめです。

[amazonjs asin=“4844362526” locale=“JP” title=“WordPress 高速化&スマート運用必携ガイド”]

さくらのVPSの初期設定

さくらのVPSを契約したら、まずはコントロールパネルからサーバーを起動します。

起動したらrootユーザーでssh接続します。パスワードはメールで送付されているはずです。

$ ssh root@160.17.60.189

ここでたまにエラーになるのですが、そんな時はコントロールパネルからサーバーを再起動すれば接続できることが多いです。

次に、ユーザーを追加します。ここでは「username」というユーザーを新しく追加することとします。

$ passwd
$ useradd username

passwordコマンドでパスワードを設定します。

$ passwd username

次に追加したユーザーにsudo権限を与えます。

今回は「wheel」グループにsudo権限を持たせ、追加したユーザーを「wheel」に所属させます。

$ usermod -G wheel username
$ visudo

visudoコマンドで設定ファイルが開くので、#(コメントアウト)を消します。

# %wheel ALL=(ALL) ALL

ついでに最低限のファイアーウォールの設定をiptablesでします。

$ iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$ iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$ iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
$ iptables -A INPUT -i lo -j ACCEPT 
$ iptables -A INPUT -p icmp -j ACCEPT
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ iptables -P INPUT DROP 
$ iptables -P OUTPUT ACCEPT
$ service iptables save

この辺りの最初の設定は、さくらインターネットサーバの初期設定ガイドに載っています。

yumの準備

アップデートをして、remiやepelなどのレポジトリを追加します。

$ yum update

yum updateで「更新と設定されたパッケージがありません。」などと出てこけたら以下のコマンドを実行したらから再度アップデートしてみてください。

$ yum clean all
$ yum check
$ yum update

remiとepelを追加します。失敗したらURLを最新のものに差し替えてみてください。

$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

nginxのインストー

次にnginxをインストールします。

yumでインストールできるnginxのバージョンを確認。

$ yum info nginx

ちょっと古かったのでnginxのレポジトリを追加してから、インストールします。

$ rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ yum install -y nginx

インストールできたらnginxを立ち上げてから、サーバー起動時に自動でnginxが立ち上がるように設定します。

$ service nginx start
$ sudo /sbin/chkconfig nginx on

phpのインストー

PHPをインストールしてphp.iniを編集します。

$ yum --enablerepo=remi -y install php php-cli php-devel php-mbstring php-gd php-pear php-xml
$ vi /etc/php.ini

php.iniは、とりあえず以下のように変更します。

expose_php = Off
date.timezone = "Asia/Tokyo"

nginxでPHPを動かす時に使うphp-fpmを入れて設定ファイルwww.confを編集します。

$ yum --enablerepo=remi -y install php-fpm
$ vi /etc/php-fpm.d/www.conf

細かいチューニングは後から行うとして、まずは以下のように設定します。

user = nginx
group = nginx
pm = static

php-fpmを立ち上げ、これもchkconfig onします。

$ service php-fpm start
$ sudo /sbin/chkconfig php-fpm on

mysqlのインストー

MySQLをインストールします。

$ yum --enablerepo=remi -y install mysql.x86_64 mysql-server.x86_64 php-mysql

ここでは、起動してからrootを「samplepassword」に設定します。

$ service mysqld start
$ sudo /sbin/chkconfig mysqld on
$ mysqladmin -u root password 'samplepassword'
$ mysql -u root -p

wordpressというデータベースを作成します。

create database wordpress default character set utf8 collate utf8_general_ci;

次にwordpressというユーザーを作成し、パスワードを「samplepassword」とします。

grant all privileges on wordpress.* to wordpress@localhost identified by 'samplepassword';

リバースプロキシの設定(nginx.confの編集)

リバースプロキシを設定するために、nginx.confとdefault.confを編集します。

設定ファイルはGistを参照してください。

*さくらのVPS:CentOS64、nginx 1.6.3、PHP 5.4.39で動作確認。 *その他の環境での動作は保証しかねます。

/etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf

設定ファイルを編集し、nginxを再起動します。

$ service nginx restart

バックアップデータの移行

WordPressを使用していてサーバー移転する時のメモです。

htmlディレクトリ以下をすべて圧縮し、データベースはdumpしてバックアップを保存。

$ tar zcvf html.tar.gz html
$ mysqldump -u root -p wordpress > dump.sql

転送先のサーバーにsftpコマンドで接続して、dump.sqlとhtml.tar.gzを転送します。

$sftp root@123.45.67.89
  put dump.sql
  put html.tar.gz

転移先のサーバーにssh接続して、html.tar.gzを解凍&dumpファイルをインポートします。

$ tar zxvf html.tar.gz
$ mysql -u root -p wordpress < dump.sql

これで、CentOS+nginx(リバースプロキシ)+ php-fpmの環境構築は完了です(多分)。

あとはサーバーの環境に合わせてチューニングすればよいかと。

[amazonjs asin=“4048702270” locale=“JP” title=“ハイパフォーマンスHTTPサーバ Nginx入門”]