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

Updated:

今回は、実際の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を運用することができます。