前回はWebサイトを高速化しようとしてApache用のmod_pagespeedを導入したものの効果がでず無効にしたことを紹介しました。
今回は根本から解決するために、高速といううわさのWebサーバnginxを導入してみたいと思います。
必要なパッケージ
ゴールは当然Wordpressを動かすことなので、nginxでWordpressを動かす方法を調べてみると、nginx以外にphp-fpm(php5-fpm)というソフトウェアが必要なことがわかりました。
しかし、Debian 6.0(Squeeze)にはphp-fpmあるいはphp5-fpmというパッケージはありません。
sudo apt-cache search php5-fpm
(何も表示されない)
sudo apt-cache search php-fpm
(何も表示されない)
そこでまずは、Debian 6.0(Squeeze)にnginxとphp-fpmを導入するところからはじめます。
nginxとphp-fpmの導入
Google検索してみると、いくつか参考になるサイトがありました。
Debian Squeeze に nginx + php-fpm な Web サーバーを構築する(リンク切れ)- HOWTO install php5-fpm on Debian Squeeze
- nginx + php-fpm + debian squeeze tutorial – the fastest way to host php!
どうも公式のパッケージではなくdotdeb.orgというところで配布されているパッケージを使うようです。
それでは導入していきます。
まずはapt-lineを追加します。
echo deb http://packages.dotdeb.org stable all > /etc/apt/sources.list.d/dotdeb.list
dotdeb.orgのPGPキーを追加します。
wget http://www.dotdeb.org/dotdeb.gpg cat dotdeb.gpg | sudo apt-key add -
パッケージリストをアップデートします。
sudo apt-get update
php関係のパッケージインストールします。
sudo apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd
念のためphpのバージョンを確認してみます。
php -v
PHP 5.3.21-1~dotdeb.0 with Suhosin-Patch (cli) (built: Jan 27 2013 11:25:03) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH
nginxをインストールします。
sudo apt-get install nginx
php-fpmを起動します。
sudo /etc/init.d/php5-fpm restart
php-fpmの動作状況を確認します。
sudo netstat -plunt | grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 7685/php-fpm.conf)
とりあえずインストールはこれで完了です。しかしこの状態ではまだnginxは動いていません。
というのもApacheがまだ動いていてnginxと競合しているからです。
まずApacheによるWebサイトを維持したまま、nginxでのWebサイトを構築していきます。具体的にはポート8080をnginxに割り当てるようにします。うまくいったらApacheを停止し、nginxにポート80(通常のWebサイト)を任せるようにします。
nginxへのWebサイトの移行
まずApacheで運用している通常の(WordPressでない)Webサイトをnginxで見れるようにします。
私は2つのドメインを持っていてちょっと変則的な運用をしています。ApacheでWebサイトを構築したときの記録から抜粋すると
- 2つのドメインでそれぞれWebサイトを構築
- scratchpad.jpドメインではscratchpad.jp以外にcolinux.scratchpad.jp, debian.scratchpad.jp, books.scratchpad.jpのサブドメインでもWebサイトを構築
ただし、http://colinux.scratchpad.jp/はhttps://scratchpad.jp/colinux/としてもアクセスできるようにしておく。debianと booksのサブドメインについても一緒。 - Webサイトのデータは「/www/ドメイン名/サブドメイン名」に置く。
なので、https://scratchpad.jp/のデータは/www/scratchpad/に、http://colinux.scratchpad.jp/のデータは/www/scratchpad/colinux/に置く。
という形で運用しています。
以下に個別のサイトの設定方法を記します。
https://scratchpad.jp/の設定
/etc/nginx/sites-available/に下記内容のscratchpadというファイルを作成します
server { listen 8080; server_name scratchpad.jp; root /www/scratchpad; index index.html index.htm; if ($http_host != "scratchpad.jp") { rewrite ^ https://scratchpad.jp$request_uri permanent; } error_log /var/log/nginx/scratchpad-error.log notice; access_log /var/log/nginx/scratchpad-access.log combined; rewrite_log on; rewrite ^/colinux/(.*) http://colinux.scratchpad.jp:8080/$1 last; rewrite ^/debian/(.*) http://debian.scratchpad.jp:8080/$1 last; rewrite ^/books/(.*) http://books.scratchpad.jp:8080/$1 last; # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
2行目のlistenで監視するポート番号8080を指定します。
3行目のserver_nameでこの設定がscratchpad.jpいうホスト名でアクセスされた場合に適用されることを指定。
4行目のDocumentRootで、この設定で/www/scratchpad以下のファイルをコンテンツとして取り扱うことを指定。
5行目ではディレクトリを直接指定されたときに表示するファイルをindex.htmlかindex.htmとする指定
7,8行目はfoo.scratchpad.jpなど想定していないホスト名でアクセスしてきた場合は、強制的にscratchpad.jpへのアクセスに書き換える設定。
10,11行目はログファイルの指定。エラーログのレベルは最初はnoticeにしておく(後述のURL書き換え情報を表示するため)。
動作確認して問題なければnoticeの部分はwarn等に変えるとよい。
13~16行目はURLの書き換え(リダイレクト)の設定。まず10行目で書き換えログをONにしたあと、11行目から13行目で書き換えルールを指定。
14行目はhttps://scratchpad.jp/colinux/・・・でアクセスされた場合に、http://colinux.scratchpad.jp/・・・に書き換え。
15行目はhttps://scratchpad.jp/debian/・・・でアクセスされた場合に、http://debian.scratchpad.jp/・・・に書き換え。
16行目はhttps://scratchpad.jp/books/・・・でアクセスされた場合に、http://books.scratchpad.jp/に書き換え。
18~23行目は.htaccessファイルへの不正なアクセスを防ぐため。/etc/nginx/sites-available/defaultからのパクリ。
http://colinux.scratchpad.jp/の設定
/etc/nginx/sites-available/に下記内容のscratchpad-colinuxというファイルを作成します。
server { listen 8080; server_name colinux.scratchpad.jp; root /www/scratchpad/colinux; index index.html index.htm; error_log /var/log/nginx/scratchpad-error.log warn; access_log /var/log/nginx/scratchpad-access.log combined; # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
これは書き換えルールとかはなく、server_nameとrootの設定ぐらいで、シンプルになります。
http://debian.scratchpad.jp/の設定
/etc/nginx/sites-available/に下記内容のscratchpad-debianというファイルを作成します。
server { listen 8080; server_name debian.scratchpad.jp; root /www/scratchpad/debian; index index.html index.htm; error_log /var/log/nginx/scratchpad-error.log warn; access_log /var/log/nginx/scratchpad-access.log combined; # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
http://books.scratchpad.jp/の設定
/etc/nginx/sites-available/に下記内容のscratchpad-colinuxというファイルを作成します。
server { listen 8080; server_name books.scratchpad.jp; root /www/scratchpad/books; index index.html index.htm; error_log /var/log/nginx/scratchpad-error.log warn; access_log /var/log/nginx/scratchpad-access.log combined; # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
もう一つのドメイン用の設定
ドメイン名をexample.comとすると、/etc/nginx/sites-available/に下記内容のexampleというファイルを作成します。
server { listen 8080; server_name example.com; root /www/example index index.html index.htm; error_log /var/log/nginx/example-error.log warn; access_log /var/log/nginx/example-access.log combined; # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
設定の有効化
Debianではngxensiteというコマンドで、/etc/nginx/sites-availableにある設定を有効にします。今回は、scratchpad, scratchpad-colinux, scratchpad-debian, scratchpad-books, exampleを作成したので、これらの引数にしてngxensiteを実行します。
sudo ngxensite scratchpad sudo ngxensite scratchpad-colinux sudo ngxensite scratchpad-debian sudo ngxensite scratchpad-books sudo ngxensite example
デフォルトの設定の無効化
デフォルトで/etc/nginx/sites-availableのdefaultという設定が有効になっているので無効化しておきます。
sudo ngxdissite default
設定の確認
nginxでは設定ファイルが正しいかどうかをチェックする機能を持っています。この機能を使って作成した設定が問題ないかどうかを確認します。
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
設定の読み込み
OSを再起動せずにnginxに設定ファイルを読み込ませるには以下の機能を設定します。
sudo /etc/init.d/nginx reload
まとめ
これでnginxで静的なWebサイトを構築することができました。
従来のURLのホスト名の部分に「:8080」でアクセスすると、nginxで生成されたWebサイトが表示されるはずです。
なお、ここで行ったnginxの設定は以前のApacheの設定と対応しています。
興味がある方はApacheの設定と比べてみると良いと思います。
次回はnginxでphpを動作させます。
コメント