今回は一般的なwebサーバーでよく利用するnginxの基本機能を紹介します。
サーバー・インフラ徹底攻略の3章になります。
Contents
バーチャルホストを利用する
1つのWebサーバーで複数のwebサイトを運用する機能です。
バーチャルホストを定義するにはserverディレクティブで区切った部分が1つのバーチャルホストとしてみなされ、中にさまざまな設定を記述することによりそのホストに関する設定を行うことができます。
バーチャルホストの説明
小悪魔女子大生のサーバエンジニア日記 バーチャルホストとは?
1 2 3 |
server{ #このホストの設定を記述 } |
serverディレクティブを用いserverコンテキストを複数定義することで複数のバーチャルホストを定義できます。
振り分けるには次の2通りの方法があります。
- IPアドレスベース
- ネームベース
IPアドレスベースのバーチャルホスト
IPアドレスによりアクセス先を変更する方法です。listenディレクティブを利用します。
listenディレクティブはserverコンテキスト内で使用し、バーチャルホストがリクエストを受け付けるIPアドレスおよびポート番号の指定を行うためのディレクティブで下記のように指定します。
1 2 3 |
server{ listen 192.168.0.11:80; } |
IPアドレスで複数のバーチャルホストを定義する場合は、次のようにlistenディレクティブで別々のアドレスを指定します。
1 2 3 4 5 6 7 |
server{ listen:192.168.0.10:80; } server{ listen:192.168.0.11:80; } |
ネームベースのバーチャルホスト
ホスト名によりアクセス先を切り替得る方法です。どちらかというとこちらのほうが一般的かと思います。
またスペースで区切ることにより複数のホスト名を指定したり、ワイルドカードを利用して複数のホスト名とマッチさせることができます。
1 2 3 |
server{ server_name www.example.com; } |
複数指定
1 2 3 |
server{ server_name www.example.com, www.example.net , www.example.org; } |
ワイルドカード指定
1 2 3 |
server{ server_name *.example.com; } |
複数指定
またスペースで区切る代わりに複数のserver_nameディレクティブを使用して設定することもできます。一般的にはserver_nameごとに設定ファイルを記述し,conf.dの下に置いておくパターンが多いでしょう。
1 2 3 4 5 6 7 8 9 10 11 |
server{ server_name www.example.com; } server{ server_name www.example.net; } server{ server_name www.example.org; } |
正規表現
さらに正規表現による指定を行うこともできます。 正規表現による指定を利用する場合は値の先頭に~をつける必要があります。
連番がついている大量のホスト名を処理するときなどに便利です。
1 2 3 |
server{ server_name ~^www\d+\.example.com; } |
アクセス制御
nginxには受け付けたリクエストに合わせて適用する設定を柔軟に切り替える機能が豊富に用意されています。
それらの機能の一部を紹介します。
locationディレクティブ
リクエストURIのパスを指定した条件と照らし合わせ、条件にマッチした場合は設定を適用するといった機能です。
1 2 3 |
location プレフィックス パス{ コンテキスト } |
たとえば下記のように記述した場合、URIのパスがmemberに前方一致した場合に認証をかける設定です。
1 2 3 |
location /member/{ #なんらかの認証 } |
また下記のように記述した場合、パスの末尾が.css .js .htmlのいずれかの場合はgzip圧縮を行うこととなります。
1 2 3 |
location ~* \.(css|html|js)${ gzip圧縮する設定 } |