さくらVPS を設定してみる:
Nginx をいれてみたよ♪ (2)
約 12 分で読める
前回の記事の続きです。
前回の記事では、Nginx の共通設定と、設定に使うための部品をつくりました。
今回は、前回つくった部品を使って、サイトの設定をしていきます。
とりあえず WordPress が使いたいので、WordPress をインストールして、使えるように設定していきますが、他のアプリケーションをインストールするときにも参考にしていただけたらうれしいです。
この記事では、リバースプロキシの機能はまだ使いません
サイトごとの設定をする
部品が完成したので、さっそくこの部品をつかって、サイトの設定をしていきましょう。
/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 で読み込まれます。
存在しないドメインへのアクセスを処理する
ここまでの設定で問題ないのですが、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 で読み込まれます。
きちんと設定できているか、確認する
設定が一段落したので、設定を反映してあげます。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 の情報がでてきたら、成功です♪
うまくいったら、テストでつくった index.php を削除してから、Nginx を自動で起動するように設定しておきます。
1 2 | $ sudo rm -rf /var/www/exampleCom/index.php $ sudo /sbin/chkconfig nginx on |
ということで、Nginx の基本的な設定は これでおしまいっ!!
リバースプロキシを使わなくっても、安定しているので、このまま使ってもいいのかなぁ〜 なんて思ったりもします。ということで、次回は この Nginx 上に、WordPress をインストールと思います。実際、Nginx とかまったく関係ないのは気のせい
でわでわ、たかともでした。