軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(設定編その2)


今回は、実際のNginxの設定ファイルの例を見てみましょう。(前回の設定編その1はこちら)

ここで説明する例は、2つの仮想ホストwww.alpha.comとwww.beta.comを運用するための設定です。

次のように、4つの設定ファイルが必要となります。

ファイル 目的
1 /etc/nginx/nginx.conf メインの設定ファイル
2 /etc/nginx/sites-available/default デフォルトホストの設定
3 /etc/nginx/sites-available/www.alpha.com 仮想ホストwww.alpha.comの設定
4 /etc/nginx/sites-available/www.beta.com 仮想ホストwww.beta.comの設定

もちろん、前回に説明したように、/etc/nginx/sites-enabledの中に、2、3、4に対して同じ名前のシンボリックリンクを作っておく必要があります。

これらの設定ファイルは、Nginxをインストールした際に用意されているデフォルトの設定ファイルの内容をベースにしています。

ここではポイントとなる点だけを説明します。具体的なディレクティブの意味については、Nginxの公式サイトのドキュメントなどを参照してください。

/etc/nginx/nginx.conf: メインの設定ファイル

1行目は、Nginxを、ユーザwww-data、グループwww-dataで実行するという意味です。4行目のworker_processesは、ワーカープロセスの個数を指定するもので、CPUのコア数を設定します。コメントにあるように、使用しているVPSは仮想3コアなので、3を指定しています。

8行目のworker_connectionsは、ワーカープロセスが同時にオープンするコネクション数の最大値を指定するものです。ここでは768にしています。

30〜31行目では、アクセスログとエラーログのパスを指定しています。

user www-data;

# Worker process setting for Sakura VPS 2G (3 Cores)
worker_processes 3;
pid /var/run/nginx.pid;

events {
	worker_connections 768;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-available/default: デフォルトホストの設定

デフォルトホストの設定ファイルです。設定されている仮想ホスト(www.alpha.com, www.beta.com)以外のホスト名、あるいはIPアドレスを指定してアクセスされた場合には、この設定にもとづいて処理されます。

ここでは、4行目のdeny allによって、常に403 Forbiddenをステータスとして返すようにしています。

server {
	listen 80 default_server;

	deny all;
}

/etc/nginx/sites-available/www.alpha.com: 仮想ホストwww.alpha.comの設定

仮想ホストwww.alpha.comの設定ファイルです。

5行目のlistenは、ポート80を使うことを指定しています。6行目のrootは、この仮想ホストのファイルは、/home/vh/www.alpha.com以下に置いてあることを意味します。7行目は、index.htmlをインデックスファイルとして認識するように設定しています。

9行目では、この仮想ホストの名前www.alpha.comを設定しています。

11〜12行目は、アクセスログとエラーログのパスを指定しています。

14行目の「location /」は、このサイトのパス”/”以下の部分に対して、ブレースで囲んだ宣言(15行目)を適用する、という意味です。パス”/”以下ということは、このサイトすべてが対象となります。

15行目のtry_filesは、指定されたパス($uriで表わされます)に対して、実際にどこを探すかを指定するものです。ここでは、「$uri」「$uri/」「=404」の3つを指定しています。

例えば、http://www.alpha.com/testにアクセスされたとしましょう。この場合、$uriには”/test”が入っています。

ですから、まずは/home/vh/www.alpha.com/testというファイルを探して、もしあればそれを返します。もしなければ、次は$uri/と指定されているので、後ろにスラッシュとindex.htmlを付けたもの、つまり/home/vh/www.alpha.com/test/index.htmlを探します。このファイルもなければ、次は「=404」と指定されていますが、これはエラーコード404を返すという意味です。ですから、「404 File Not Found」を返します。

#
#  www.alpha.com
#
server {
	listen 80;
	root /home/vh/www.alpha.com;
	index index.html;

	server_name www.alpha.com;

	access_log /var/log/nginx/www.alpha.com-access.log;
	error_log /var/log/nginx/www.alpha.com-error.log;

	location / {
		try_files $uri $uri/ =404;
	}
}

/etc/nginx/sites-available/www.beta.com: 仮想ホストwww.beta.comの設定

仮想ホストwww.beta.comの設定ファイルです。ファイルやディレクトリのパス名が違うだけで、それ以外の内容はwww.alpha.comと同じです。

#
#  www.beta.com
#
server {
	listen 80;
	root /home/vh/www.beta.com;
	index index.html;

	server_name www.beta.com;

	access_log /var/log/nginx/www.beta.com-access.log;
	error_log /var/log/nginx/www.beta.com-error.log;

	location / {
		try_files $uri $uri/ =404;
	}
}

これら4つの設定ファイルによって、2つの仮想ホストwww.alpha.com、www.beta.comを運用することができます。

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(設定編その1)


今回は、特にUbuntu個有の設定ファイルの書き方やコンベンションについて説明します。(前回の起動・停止編はこちら)

Ubuntuでは、Nginxの設定ファイルは/etc/nginx以下に置かれています。

メイン設定ファイル: nginx.conf

/etc/nginxには、メインの設定ファイルnginx.confがあります。nginx.confには、サイト全体の設定を記述します。Nginxをインストールした状態では、サンプルの設定が入っています。

/etc/nginxの直下には、この他にもいろいろな設定ファイルがありますが、通常はnginx.conf以外をいじる必要はないでしょう。

追加設定用ディレクトリ: /etc/nginx/conf.d

このディレクトリには、追加の設定を行なうためのファイルを入れます。nginx.confの末尾では、このディレクトリと/etc/nginx/sites-available(この後すぐに説明します)の中にある*.confを読み込むようになっています。

Nginxをインストールした状態では、このディレクトリには何も入っていません。

仮想ホスト設定用ディレクトリ: /etc/nginx/sites-{available,enabled}

2つのディレクトリ/etc/nginx/sites-availableと/etc/nginx/sites-enabledは、仮想ホストを設定するためのものです。

/etc/nginx/sites-availableには、仮想ホストの設定ファイルを入れます。1つの設定ファイルで、仮想ホスト1個を定義します。設定ファイル名は、仮想ホストのドメイン名と同じにすると管理が楽です。

インストール時には、このディレクトリにはdefaultというファイルが入っています。この内容を参考にして、仮想ホストの定義を書くとよいでしょう。

Nginxは、起動時に、ディレクトリ/etc/nginx/sites-enabledに入っている設定ファイルを読み込みます。ですから、有効にしたい仮想ホストについては、sites-available/にある設定ファイルへのシンボリックリンクを、sites-enabled/の中に作っておかなければなりません。

例えば、仮想ホストwww.foo.comを定義するには、次のようにします。

1. ディレクトリ/etc/nginx/sites-availableの中に、仮想ホストwww.foo.comの設定を記述したファイルwww.foo.comを作成する。

$ sudo vi /etc/nginx/sites-available/www.foo.com
....
     仮想ホストwww.foo.com の設定を入力する
....

2. ディレクトリ/etc/nginx/sites-enabledの中に、1で作成した設定ファイルwww.foo.comへのシンボリックリンクを作る。シンボリックリンクの名前は、設定ファイルと同じ名前www.foo.comにする。

$ sudo ln -s /etc/nginx/sites-available/www.foo.com /etc/nginx/sites-enabled

3. Nginxをリスタートする

$ sudo /etc/init.d/nginx restart

また、仮想ホストwww.foo.comを(一時的に)無効にするには、ステップ2で作成したシンボリックリックを削除して、Nginxをリスタートしてやります。

つまり、シンボリックリンクを作成すれば仮想ホストは有効になり、シンボリックリンクを削除すれば、仮想ホストは無効になります。

余談ですが、Ubuntuでは、apacheでも、2つのディレクトリsites-availableとsites-enabledを使って、仮想ホストを管理します。さらに、apacheでは、コマンドa2ensite(仮想ホストを有効する)とa2dissite(仮想ホストを無効にする)が用意されています。

しかし、Nginxでは、このようなコマンドは用意されていないので、手作業でsites-enabledからsites-availableへのシンボリックを作成・削除する必要があります。

次回は、実際の設定ファイルをみてみます。

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(起動・停止編)


今回は、Ubuntuで、ウェブサーバNginxを起動・停止する方法と、設定ファイルの内容をチェックする方法を説明します。(前回のインストール編はこちら)

Nginxを起動・停止する

UbuntuにNginxをインストールすると、ブート時に自動的に起動するように設定されます。ですから、普通にマシンをブートした場合には、手動でNginxを起動する必要はありません。

しかし、メンテナンスや設定を変更する際には、コマンドを使って手動で起動・停止する必要があります。起動や停止の方法は、Ubuntuの標準的なデーモンと同じです。

# 起動する
$ sudo /etc/init.d/nginx start

# 停止する
$ sudo /etc/init.d/nginx stop

# 再起動する
$ sudo /etc/init.d/nginx restart

# ステータスを表示する
$ sudo /etc/init.d/nginx status

Nginxの設定ファイルの内容をチェックする

Nginxの設定ファイルを書き換える時には、まず最初に、次のコマンドを実行して、設定ファイルの内容に誤りが無いことを確認してください。

# 設定ファイルの内容をチェックする
$ sudo /etc/init.d/nginx configtest

もしNginxの設定ファイルに何か誤りがあれば、次の例のように、エラーメッセージが表示されるので、設定ファイルを修正してください。

$ sudo /etc/init.d/nginx configtest
Testing nginx configuration: nginx: [emerg] unknown directive "http" in /etc/nginx/nginx.conf:12
nginx: configuration file /etc/nginx/nginx.conf test failed
$

設定ファイルに何も問題がなければ、次のように”Testing nginx configuration: nginx.”というメッセージだけが表示されます。

$ sudo /etc/init.d/nginx configtest
Testing nginx configuration: nginx.
$

設定ファイルに問題がなければ、次のコマンドでNginxを再起動させます。

$ sudo /etc/init.d/nginx restart

———————————————————————-

次のエントリでは、Nginxの設定ファイルについて解説しましょう。

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(インストール編)


先週、ブログとウェブサイトを分離して、サーバを移転しました。これまではレンタルサーバを使っていましたが、新サイトはさくらVPSのサーバの上で、ウェブサーバNginxを動かしています。

Nginxは、ロシアで開発された軽量で高速なウェブサーバで、HTTPのリバースプロキシー機能とメールのプロキシー機能も備えています。詳しくは公式サイトwww.nginx.orgの解説(日本語)をご覧ください。

このエントリでは、Ubuntu 12.04 LTSにNginxをインストールする手順を説明します。

インストールするパッケージを決める

Nginxをインストールするには、次の3つの方法があります。

  1. Ubuntuのパッケージをインストールする
  2. www.nginx.orgで公開されているパッケージをインストールする
  3. ソースからビルドする

1はUbuntuの公式なパッケージをインストールする方法です。現在、12.04 LTS(precise)では、Nginxのバージョンは1.1.19です。2は、Nginxの公式サイトが公開している、Ubuntu用のパッケージをインストールする方法で、安定版の最新バージョンがインストールされます。3は、www.nginx.orgからソースプログラムをダウンロードして、自分でコンパイルする方法です。

ここでは、手軽さから、1の方法をとりました。

Ubuntu 12.04LTSでは、3種類のパッケージが用意されています。

  • nginx-light – nginx web server with minimal set of core modules
  • nginx-full – nginx web server with full set of core modules
  • nginx-extras – nginx web server with full set of core modules and extras

これらのパッケージは、組み込まれているモジュールや機能の個数が違います。Nginxは、スタティックリンクでビルドされるので、あらかじめ必要なモジュールを組み込んでビルドしておく必要があるのです。下のものほど、機能が多いことになります。

私は、「全部入り」のnginx-extrasを選びました。

また、ドキュメントは次のパッケージに入っています。

  • nginx-doc – small, but very powerful and efficient web server (documentation)

ですから、私は、2つのパッケージnginx-extrasとnginx-docをインストールすることにしました。

Nginxをインストールする

1. パッケージをインストールする

$ sudo apt-get install nginx-extras
$ sudo apt-get install nginx-doc

2. ポート80を開放する

Ubuntuでは、ファイアウォールを制御するには、ufwコマンドを使用します。

次のコマンドでポート80をオープンします。コマンドの引数にhttpを指定していますが、これはポート80を表わします。

$ sudo ufw allow http

ポートが開放されたことを確認します。ファイアウォールの状態を表示するには、sudo ufw statusコマンドを使います。次のように表示されればOkです。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
80                         ALLOW       Anywhere

$

ここでは、Toが80、ActionがALLOW、FromがAnywhereとなっており、「ポート80に対して、すべてのIPアドレスからのアクセスが許可されている」という意味になります。

3. nginxをスタートする

$ sudo /etc/init.d/nginx start

4. ブラウザからアクセスして、Nginxが起動していることを確認する。

例えばローカルマシンのブラウザから「http://localhost/」にアクセスすると、”Welcome to nginx!”というシンプルなページが表示されます。これでNginxが起動していることが確認できました。

5. 自分のIDをグループwww-dataに追加する。

Ubuntuでは、Nginxはユーザwww-dataとグループwww-dataで動作するようになっています。ですから、次のようにして、addgroupコマンドを使って、自分のID(この例ではMY_IDとしています)を、グループwww-dataに追加しておくと便利です。

$ sudo addgroup MY_ID www-data

———————————————————————-
次のエントリでは、Nginxの起動や停止の方法について説明します。