TOTEKAN

Mac と過ごす素敵な日々

さくらVPS を設定してみる:
Nginx をいれてみたよ♪ (2)

12 分で読める

WHERE THE WEB WAS BORN
WHERE THE WEB WAS BORN by Max Braun, on Flickr

前回の記事の続きです。

前回の記事では、Nginx の共通設定と、設定に使うための部品をつくりました。

今回は、前回つくった部品を使って、サイトの設定をしていきます。

とりあえず WordPress が使いたいので、WordPress をインストールして、使えるように設定していきますが、他のアプリケーションをインストールするときにも参考にしていただけたらうれしいです。

この記事では、リバースプロキシの機能はまだ使いません

サイトごとの設定をする

Edith Abeyta - sumo mug - in production at Angels Gate
Edith Abeyta - sumo mug - in production at Angels Gate by Marshall Astor - Food Fetishist, on Flickr

部品が完成したので、さっそくこの部品をつかって、サイトの設定をしていきましょう。

/etc/nginx/conf.d にサーバーの名前など、わかりやすい名前で設定ファイルをつくります。例として /etc/nginx/conf.d/example.conf というファイルを作っていきます。

以下のような構成でサーバーの設定をします。

公開するディレクトリ
/var/www/exampleCom
公開するURL
http://example.com
サブドメインについて
すべて http://example.com へリダイレクト。www 以外も。
php-fpm の待ち受けポート ( 前回の記事の php-fpm.conf の設定を参照 )
127.0.0.1:9000
画像のファイルなど、アップロードしたものを置くディレクトリ
/var/www/exampleCom/uploads
/var/www/exampleCom/wp-content/uploads
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
$ sudo vi /etc/nginx/conf.d/example.conf
 
server {
    listen      80; 
    server_name *.example.com;
    rewrite     ^   http://example.com$request_uri?;
}
 
server {
    listen      80; 
    server_name example.com;
    root        /var/www/exampleCom;
    index       index.html index.php;
 
    access_log  /var/log/nginx/example_com_access.log main;
    error_log   /var/log/nginx/example_com_error.log;
 
    include	/etc/nginx/conf.d/extra/general.conf;
    include	/etc/nginx/conf.d/extra/wordpress-general.conf;
 
    location ~ \.php$ {
        try_files       $uri    =404;
        include         fastcgi_params;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        if ($uri !~ ^(/uploads/|/wp-content/uploads/) {
            fastcgi_pass    localhost.localdomain:9000;
        }
    }      
}

ここでも重要なところだけ説明していきます。

server_name *.example.com;
www.example.com や test.example.com などのサブドメインへのアクセスを rewrite をつかって、example.com へリダイレクト。特定のサブドメインだけを指定するには、server_name www.example.com test.example.com と並べるだけでOK。
server.name example.com;
example.com にきたリクエストを処理させます。
root /var/www/exampleCom;
ルートディレクトリを設定。http://example.com で、このディレクトリにアクセスするようになる
index index.html index.php;
http://example.com にアクセスしたときに 表示させるファイル
include /etc/nginx/conf.d/extra/general.conf;
静的なファイルの処理する設定を読み込んでいます。上でつくった部品。
include /etc/nginx/conf.d/extra/wordpress-general.conf;
同じく、WordPress の共通設定を読み込んでいます。
location ~ \.php$
PHP ファイルの処理をここから PHP-FPM に渡しています。
if ($uri !~ ^(/uploads/|/wp-content/uploads/)
ファイルをアップロードするディレクトリでは PHP を実行できないようにする。PHP のファイルをそのままアップロードすることはないと思いますが、PHP のファイルをアップロード → 実行 → ぼかーんっ!! みたいなことがないようにします。
fastcgi_pass localhost.localdomain:9000;
ここ大事っ!! localhost.localdomain は実際には 127.0.0.1、9000 というのは php-fpm 待ち受けポートです。fastcgi_pass 127.0.0.1:9000; と紹介されることが多いのですが、これだと WordPress を使ったときに wp-cron.php がうまく動いてくれません。localhost から指定してあげるようにしてください。

PHP の設定も部品として作ってあげても良かったのですが、ファイルをアップロードするディレクトリがサイトによって違うので、server{} の中に書いてあります。

このファイルは /etc/nginx/nginx.conf の include /etc/nginx/conf.d/*.conf で読み込まれます。

存在しないドメインへのアクセスを処理する

Life is precious and Precious has life
Life is precious and Precious has life by lavandarfields, on Flickr

ここまでの設定で問題ないのですが、example.com 以外のアクセスを処理させるための設定をしておきます。この設定をすると あまり礼儀正しくない人に対して、特定のページをみせたりすることができます。

名前はなんでもいいのですが、例として、/etc/nginx/conf.d/default.conf というファイルにしておきます。もしファイルがすでにある場合は、中身をコメントアウトして使うか、拡張子を変更するように ( .conf から .conf.org のように ) リネームしてください。

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
$ sudo vi /etc/nginx/conf.d/default.conf
 
server {
    listen          80 default_server;
    server_name     _;
    root /usr/share/nginx/html;
    index index.html;
 
    include /etc/nginx/conf.d/extra/general.conf;
 
    access_log  /var/log/nginx/blank_access.log main;
    error_log   /var/log/nginx/blank_error.log;
 
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
 
server {
    listen          8080 default_server;
    server_name     _;
    return 444;
}

ここでも重要な部分だけ説明していきます。

listen 80 default_server;
Nginx では最初に出てきたサーバーがデフォルトのサーバーになってしまうので、default_server をつけて、明示的に設定してあげています。80番ポートへのアクセスで他のサーバーの設定に当てはまらないときに、この設定が使われます。
server_name _;
80番ポートへのアクセスで、他のサーバーの設定に当てはまらないときに、server_name を 存在しないドメイン名の _ に設定しています。サーバー名を設定しないと、ホスト名が返されるので、何か設定しないといけない。でも、存在するドメインだとまずい。→ _ を使っている。
root /usr/share/nginx/html;
/usr/share/nginx/html 以下にアクセスさせます。
error_page 500 502 503 504 /50x.html;
500, 502, 503, 504 エラーのページを 50x.html に設定
location = /50x.html
/usr/share/nginx/html から 50x.html のファイルを探すしてアクセス。
listen 8080 default_server;
フライングですが、リバースプロキシを使うときに 8080ポートを経由させる予定なので、このポートに怪しいアクセスがあったときのために、処理をしています。
return 444;
標準外のエラーを返すことで、接続を閉じる。

同じ設定を2つ書くよりもいいかなぁ〜と思って、80番ポートへのアクセスは /usr/share/nginx/html へ向かうようしました。実際は 80番ポートへのアクセスも 8080番ポートと同じように return 444; のように処理してしまってもいいと思います。

これを応用すれば VirtualHost の設定もばっちりですね♪ ( server_name _; を 実際に使うサーバー名に変更、root /usr/share/nginx/html; でドキュメントルートを設定 )

このファイルは /etc/nginx/nginx.conf の include /etc/nginx/conf.d/*.conf で読み込まれます。

きちんと設定できているか、確認する

Check 044933
Check 044933 by Steve Snodgrass, on Flickr

設定が一段落したので、設定を反映してあげます。Nginx が動いていれば 再起動、もしくは 設定を再読み込みを、Nginx がまだ動いていない場合は Nginx を起動してあげます。

1
2
3
4
5
6
7
$ sudo /etc/init.d/nginx restart
 
もしくは
$ sudo /etc/init.d/nginx reload
 
Nginx が動いていなければ
$ sudo /etc/init.d/nginx start

再起動ができたら、まずは静的なファイルでアクセスできるか、/var/www/exampleCom に index.html を作って、確認してみます。

1
2
$ sudo touch /var/www/exampleCom/index.html
$ sudo echo "Hello World!!" >> /var/www/exampleCom/index.html

あとはブラウザから http://example.com にアクセスして、"Hello World!!" と表示されていれば、静的なファイルはきちんと処理ができています。

次に、PHP がきちんと動くか確認してみましょう。

さっきつくった index.html を削除して、index.php をつくります。

1
2
3
$ sudo rm -rf /var/www/exampleCom/index.html
$ sudo touch /var/www/exampleCom/index.php
$ sudo echo "<?php phpinfo(); ?>" >> index.php

ファイルができたら、同じように http://example.com にアクセスします。今度は下の画像のように PHP の情報がでてきたら、成功です♪

phpinfo()

うまくいったら、テストでつくった index.php を削除してから、Nginx を自動で起動するように設定しておきます。

1
2
$ sudo rm -rf /var/www/exampleCom/index.php
$ sudo /sbin/chkconfig nginx on

ということで、Nginx の基本的な設定は これでおしまいっ!!

リバースプロキシを使わなくっても、安定しているので、このまま使ってもいいのかなぁ〜 なんて思ったりもします。ということで、次回は この Nginx 上に、WordPress をインストールと思います。実際、Nginx とかまったく関係ないのは気のせい

でわでわ、たかともでした。

最後まで記事を読んでいただき、ありがとうございます。

このブログを少しでも、みなさんの記憶に残していただけるのであれば、ぜひ 左のアイコンから RSS 登録していただけたらうれしいです。また Twitter や Facebook もやっています。それぞれ、下から登録していただけたら、うれし泣きで号泣させていただきます。

Ads by Google