helloworlds

not a noun, it's a verb

【nginx】nginx再入門 概要と特徴

今回はnginxについてです。

nginxについてですが、 この記事では主に、概要と特徴についてまとめています。

実際の設定ファイルの記述(記述自体簡単なので、説明しなくもいいが)についてや、 モジュールについての細かい説明はしていません。

基本的な部分を軽く抑えておきましょう!

Nginx

概要

Nginxはロシア生まれの軽量HTTPサーバーである。 非同期ソケットを使用していて、要求を受け取った回数と同じだけの 子プロセス を作成したりはしない。 これはCPUの負荷とメモリの消費量を大幅に下げることができる。1つのコアに1つのプロセスがあれば、数千の接続を処理できる。 設定ファイルも読みやすく、非常に強力なプラグインシステム、モジュール を備えているのも特徴である。

設定ファイル概要

基本的に nginx.conf ファイル(分割可)は directive(ディレクティブ) 構造で記述する。 大きく2つに分類される。

  • simple directive(基本ディレクティブ) 設定項目 設定値;

  • block directive(ブロックディレクティブ) 設定項目名A { 設定項目名B 設定値B; }

ディレクティブはモジュールによって導入される。 例えば、デフォルトで含まれているeventsブロックがあるが、Eventsモジュールが有効にするディレクティブはeventsブロックでしか定義できない。 また、httpブロック内では、1つ以上のserverブロックを定義できるように、サーバーに対してグローバルな影響を与えるディレクティブも存在する。

最後に重要な点として、継承 についてである。 http, server, locationブロックが主に上位ブロックとして存在する。(その他、root, eventブロックなど)

以下のような例だとする。

http {
    server {
        charset utf-8;
        listen 80;
        server_name test.co.jp;
        index index.html index.htm;

        location  /  {
            index index.php;
        }
        location /test/ {
            index test.php;
        }
    }
}

locationブロックが2つあり、serverブロックに属している。 この時、serverブロックに宣言されている、utf-8listen 80の設定は2つのlocationブロックにも適用される。 つまり、あるlocationに対して、独自の設定を宣言したい場合は、locationブロック内で宣言する。

私の経験として、設定ファイルを分割し継承がごちゃごちゃになって、正常にサーバーがレスポンスを返してくれなくなったことがありました。。 ブラウザでネットワークまわりのエラーがでたら、nginxの設定をよく見直してみること。

C10K問題

C10K問題 とは、ハードウェアの性能上は問題なくとも、クライアントの数があまりにも多くなるとサーバーがパンクする問題のことである。 C = Client10K = 1万という意味で、クライアント1万台問題ともいわれる。

C10K 問題とは - はてなキーワード

これは概要で書いてある特徴の1つで、Nginxのアーキテクチャが肝になってくる。 主に、マスタープロセスとワーカープロセスが立ち上がり、

マスタープロセスは、ワーカープロセスの立ち上げや制御、管理などを担い、 ワーカープロセスは、複数のリクエストを処理する。

Apacheのデフォルトのアーキテクチャなどでは、1リクエストに対して、1プロセスが処理していくことになるので負荷がかかりやすい。 Nginxはこうして、C10K問題を解決している。 また、この仕組みによって、リバースプロキシなどの用途としてよく活用されていることに説明がつきそうである。