ビギナーのガイド

開始、停止、設定のリロード
設定ファイルの構造
静的コンテンツの提供
単純なプロキシサーバの設定
FastCGIプロキシの設定

このガイドではnginxの簡単な紹介とそれによるいくつかの簡単なタスクを説明します。nginxは既に読者のマシーンにインストールされているとします。そうでなければ、nginxのインストール ページを見てください。このガイドはnginxの開始、停止、設定の再読込みを説明し、nginxが静的コンテンツを提供するように設定する方法、nginxをプロキシサーバとして設定する方法、FastCGIアプリケーションを使って接続する方法について説明します。

nginxには一つのマスタープロセスと幾つかのworkerプロセスがあります。マスタープロセスの主な目的は設定の読み込みと評価、そしてworkerプロセスを保守することです。workerプロセスが実際のリクエストの処理を行います。nginxは効果的にworkerプロセスにリクエストを分配するためにイベントベースのモデルとOSに依存した仕組みを採用しています。workerプロセスの数は設定ファイル内で定義され、指定された設定に固定されるか、または自動的に利用可能なCPUのコアの数に調整されます(worker_processesを参照してください)

nginxとそのモジュールの動き方は設定ファイルで決定されます。デフォルトでは、設定ファイルはnginx.confという名前で、/usr/local/nginx/conf, /etc/nginx, または /usr/local/etc/nginxのディレクトリの中にあります。

開始、停止、設定のリロード

nginxを開始するには実行ファイルを実行します。nginxが開始されると、実行ファイルに-s パラメータを付けて実行することで制御することができます。次の構文を使います:

nginx -s signal

signal は次のうちのどれかです:

例えば、workerプロセスの現在のリクエストの提供が終了するのを待ってnginxプロセスを停止するには、次のコマンドが実行されるでしょう:

nginx -s quit

このコマンドはnginxを開始したのと同じユーザで実行されるべきです。

設定の再読込みのコマンドがnginxに送られるか再起動されるまで、設定ファイルへの変更は適応されません。設定を再読込みするには、次を実行します:

nginx -s reload

マスタープロセスが設定の再読込みシグナルを受け取ると、新しい設定ファイルの構文の妥当性をチェックし、その設定を適用しようとします。成功した場合は、マスタープロセスは新しいworkerプロセスを開始し、古いworkerプロセスにメッセージを送り、シャットダウンするようにリクエストします。さもなければ、マスタープロセスは変更を巻き返し、古い設定で動作し続けます。古いworkerプロセスはシャットダウンのコマンドを受け取り、新しい接続の受け入れを止め、現在の全てのリクエストの提供が終わるまで提供を続けます。その後、古いworkerプロセスは終了します。

シグナルはまたkillユーティリティのようなUnixツールの助けをかりてnginxプロセスへ送られるかも知れません。この場合、シグナルは指定されたプロセスIDを使ってプロセスに直接送られます。nginxマスタープロセスのプロセスIDは、デフォルトでは /usr/local/nginx/logs または /var/runディレクトリのnginx.pidに書かれます。例えば、マスタープロセスIDが1628の場合、nginxのgraceful シャットダウンを起こすQUITシグナルを送るには、次のものを実行します:

kill -s QUIT 1628

全ての実行中のnginxプロセスのリストを取得するには、例えば次のようにpsユーティリティが使われるでしょう:

ps -ax | grep nginx

nginxにシグナルを送るための情報はControlling nginxを見てください。

設定ファイルの構造

nginxは設定ファイルで指定されたディレクティブによって制御されるモジュールから出来ています。ディレクティブはシンプルディレクティブとブロックディレクティブに分けられます。シンプルディレクティブは名前とパラメータが空白で分けられセミコロン(;)で終わるものから出来ています。ブロックディレクティブはシンプルディレクティブと同じ構造をしていますが、セミコロンの代わりに大括弧({})で囲まれた追加の指示のセットで終わります。ブロックディレクティブが大括弧内に他のディレクティブを持つことが出来る場合は、コンテキストと呼ばれます(例: events, http, server および location)。

設定ファイル中のどのコンテキストの外部にあるディレクトティブはmain コンテキストにあると見なされます。eventshttp ディレクティブは、mainコンテキスト、httpの中のserverserverの中のlocation の中にあります。

#記号の後にある行はコメントと見なされます。

静的コンテンツの提供

webサーバの重要なタスクは(画像または静的なHTMLページのような)ファイルを提供することです。ffYou will implement an example where, depending on the request, files will be served from different local directories: /data/www (which may contain HTML files) and /data/images (containing images). こうするには、二つのlocationブロックを使ってhttpブロックの中にserverブロックを設定する必要があるでしょう。

まず、/data/www ディレクトリを作成し、なんらかの内容が入ったindex.htmlを置き、なんらかのイメージが置かれた/data/imagesディレクトリを作成します。

次に、設定ファイルを開きます。デフォルトの設定ファイルは既に幾つかのserverブロックの例が含まれていて、多くはコメントアウトされています。ここでそのような全てのブロックをコメントアウトし、新しいserver ブロックを始めます:

http {
    server {
    }
}

一般的に、設定ファイルにはlistenしているポート番号とサーバ名によって識別されるサーバブロックが幾つかあるでしょう。nginxがどのserver がリクエストを処理するかを決定すると、nginxはリクエストヘッダで指定されたURIをserverブロックの中で定義されたlocationディレクティブに対してテストします。

次のlocationブロックをサーバブロックに追加します:

location / {
    root /data/www;
}

この location ブロックは、リクエストのURIと比較される"/"プリフィックスを指定します。リクエストのマッチングのために、URIはローカルファイルシステムのリクエストされたファイルへのパスを形成するために、rootディレクティブで指定されたパス、/data/www、に追加されるでしょう。もし幾つかの一致するlocation ブロックがある場合は、nginxは一番長いprefixのものを選択します。上のlocation ブロックはもっとも長さが短いプリフィックスを提供し、他の全てのlocation ブロックが一致しなかった場合に、このブロックが使われるでしょう。

次に二つ目のlocation ブロックを追加します:

location /images/ {
    root /data;
}

それは/images/で始まるリクエストに適合するものです (location / もそのようなリクエストに適合しますが、prefixが短いです)。

結果的にserver ブロックの設定は次のようになります:

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

これは標準ポート80でlistenし、http://localhost/でローカルマシーンにアクセス可能な、すでに動作しているサーバ設定です。URLが/images/で始まるリクエストに応答するために、サーバは/data/images ディレクトリからファイルを送信するでしょう。例えば、http://localhost/images/example.pngリクエストに応答するために、nginxは/data/images/example.png ファイルを送信するでしょう。もしそのようなファイルが存在しなければ、nginxは404エラーを示す応答を返すでしょう。URIが/images/で始まらないリクエストは/data/www ディレクトリに割り振られます。例えば、http://localhost/some/example.html リクエストに応答するために、nginxは/data/www/some/example.html ファイルを返すでしょう。

新しい設定を適用するには、nginxがまだ開始されていない場合は開始するか、次のようにnginxのマスタープロセスにreloadシグナルを送信します:

nginx -s reload

何かが期待しているように動作しない場合は、/usr/local/nginx/logs または /var/log/nginx ディレクトリにあるaccess.logerror.log ファイルの中から理由を見つけようとするかも知れません。

単純なプロキシサーバの設定

nginxの良くある使い方の一つはproxyサーバとして設定する事です。サーバがリクエストを受け取り、プロキシされているサーバにリクエストを渡し、サーバから応答を回収し、クライアントに応答を送信します。

画像のリクエストをローカルディレクトリのファイルから提供し、その他の全てのリクエストをプロキシされているサーバに送るような基本的なプロキシサーバを設定しましょう。この例では、どちらのサーバも一つのnginxインスタンス上で定義されるでしょう。

まず、nginxの設定ファイルに次の内容のserverブロックを追加しプロキシされるサーバを定義します:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

これはポート8080でlistenする単純なサーバ(これまでは、標準のポート80が使われたためlisten は指定されませんでした)で、全てのリクエストをローカルファイルシステムの/data/up1 ディレクトリにマップします。このディレクトリを作成し、index.htmlファイルを中に置きます。root ディレクティブがserverコンテキストの中に置かれていることに注意してください。リクエストの提供のためのlocationブロックが独自のrootディレクティブを含んでいない時に、そのようなroot ディレクティブが使われます。

次に、前のセクションのサーバ設定を使って、それをプロキシサーバの設定に使うために修正します。最初のlocation ブロックにproxy_pass ディレクティブをプロキシされるサーバのプロトコルと名前とポート番号をパラメータとして指定して置きます。(この場合、http://localhost:8080):

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

二つ目のlocationブロックを修正して、現在は/images/プリフィックスをもつリクエストを/data/images ディレクトリの下のファイルにマップしているものから、特有のファイル拡張子を持つ画像のリクエストにマッチするようにします。変更されたlocation ブロックは次のようになります:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

パラメータは.gif, .jpg, または .pngで終わるURL全てに合う正規表現です。正規表現の前には~がある必要があります。対応するリクエストは /data/images ディレクトリに割り当てられるでしょう。

nginxがリクエストに応えるlocationブロックを選択する時は、まずプレフィックスを指定するlocationディレクティブをチェックし、もっとも長いプリフィックスのlocation を記憶し、それから正規表現をチェックします。正規表現にマッチするものがあれば、nginxはこの location を取り出します。そうでなければ、以前に記憶したものを取り出します。

プロキシサーバ設定の結果は以下のようになるでしょう:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

このサーバは.gif, .jpg, or .png で終わるリクエストをフィルターし、 /data/images ディレクトリ(root ディレクティブのパラメータにURLを追加することで)に割り当て、それら以外の全てのリクエストを上で設定されたプロキシサーバへ渡します。

新しい設定を適用するには、前のセクションで説明したようにreload シグナルをnginxに送ります。

プロキシ接続をもっと設定するために使えそうなさらに多くのディレクティブがあります。

FastCGI プロキシの設定

nginxはリクエストをさまざまなフレームワークやPHPのようなプログラム言語で構築されたアプリケーションが実行されているFastCGIサーバに導くために使うことができます。

もっとも基本的なFastCGIサーバと動作するようなnginxの設定には、proxy_passディレクティブではなくfastcgi_pass ディレクティブを使い、fastcgi_param ディレクティブを使ってFastCGIサーバにパラメータを渡します。FastCGI サーバはlocalhost:9000でアクセス可能とします。前のセクションのプロキシ設定をベースとして、fastcgi_pass ディレクティブ付きでproxy_pass ディレクティブに置き換え、パラメータを localhost:9000に変更します。PHPでは、スクリプト名を決定するためにSCRIPT_FILENAME パラメータが使われ、QUERY_STRING パラメータはリクエストパラメータを渡すために使われます。結果の設定は以下のようになります:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

これにより、静的なイメージを除く全てのリクエストがlocalhost:9000上でFastCGIプロトコルを使ってプロキシされたサーバへ導かれます。

TOP
inserted by FC2 system