nginx入門から入門へ

6339 ワード

Nginxはロシア人がc++で作成した非常に軽量級のHTTPサーバであり、メールサーバ、逆プロキシサーバ、静的リソースサーバとしても機能する.
概要
  • Nginxはイベント駆動で記述されているため、非常に優れたパフォーマンスを発揮し、非常に効率的な逆エージェント、負荷バランスでもあります.Lighttpdに対応するパフォーマンスと、Lighttpdのメモリ漏洩の問題はありません.
  • Nginxは性能最適化のために開発され、性能はその最も重要な考慮であり、実現上非常に効率を重視している.カーネルPollモデルをサポートし、高負荷の試練に耐え、50000個の同時接続数をサポートできるという報告があります.
  • Nginxは高い安定性を有する.他のHTTPサーバは、アクセスのピークに遭遇したり、悪意のある低速接続を開始したりすると、サーバの物理メモリが頻繁に交換され、応答が失われ、サーバを再起動するしかない可能性があります.例えば、現在のapacheが200以上のプロセスに進むと、web応答速度は明らかに遅くなります.一方、Nginxは段階的なリソース割り当て技術を採用しており、CPUとメモリの占有率が非常に低い.nginxは公式には10000個のアクティブな接続を維持し、2.5 Mのメモリしか占めていないため、DOSのような攻撃はnginxにとって基本的に役に立たないと明らかにした.安定性については、nginxはlightthttpdより優れている.
  • Nginxはホット・デプロイをサポートします.その起動は特に容易で、7*24を無停止で実行することができ、数ヶ月実行しても再起動する必要はありません.また、継続的なサービスでソフトウェアバージョンをアップグレードすることもできます.
  • ……

  • HTTP基礎機能:
  • 静的ファイル、インデックスファイル、および自動インデックスを処理する.
  • リバースエージェント加速(キャッシュなし);
  • FastCGI、簡単な負荷等化と許容誤差;
  • モジュール化された構造.フィルタには、gzipping、byte ranges、chunked responses、およびSSI-filterが含まれる.SSIフィルタでは、同じproxyまたはFastCGIへの複数のサブリクエストが同時に処理される.
  • SSLとTLS SNIのサポート;

  • 基本概念:
    1.フォワードエージェント:
    ユーザーはプロキシサーバーにアクセスします.サイトはユーザーに不透明です.ユーザーサービス.
    2.逆エージェント:
    ユーザーは、リバースプロキシサーバにアクセスします.しかし、ユーザーは、リバースエージェントサーバの複数のサイトのうち、どのサイトにアクセスしているのか分かりません.サーバーにサービスします.
    3.負荷等化
    nginxのupstreamは現在4つの方式の割り当て1)、ポーリング(デフォルト):各リクエストは時間順に異なるバックエンドサーバに1つずつ割り当てられ、バックエンドサーバがdownした場合、自動的に取り除くことができる.2)、weight:ポーリングの確率を指定し、weightとアクセス比率を比例させ、バックエンドサーバのパフォーマンスが不均一な場合に使用します.2)、ip_hash:各リクエストはipにアクセスしたhash結果によって割り当てられ、各ゲストがバックエンドサーバに固定的にアクセスし、セッションの問題を解決することができます.3)、fair(サードパーティ):バックエンドサーバの応答時間別に要求を割り当て、応答時間の短い優先割当て.4)、url_hash(サードパーティ)
    4.非同期非ブロック
    Nodeと同様にNginxは、要求を処理するために非同期非ブロック方式を採用している.Nginxはリクエストを処理するためにマルチワークを採用しており、各ワークにはプライマリスレッドが1つしかなく、各ワークスレッドは高同時性の特性を継承しています.apacheの一般的な動作を考えてみると(apacheには非同期非ブロックバージョンもありますが、いくつかのモジュールが付属しているため、一般的ではありません)、各リクエストは1つのワークスレッドを独占し、同時数が数千に達すると、同時に数千のスレッドがリクエストを処理します.これはオペレーティングシステムにとって、小さな挑戦であり、スレッドによるメモリの消費量が非常に大きく、スレッドのコンテキスト切替によるcpuのオーバーヘッドが大きく、自然性能が上がらないが、これらのオーバーヘッドはまったく意味がない.
    コマンド#コマンド#
    1.インストール
    osx用homebrew
    brew install nginx
    

    2.nginxコマンド
    コマンド#コマンド#
    コメント
    nginx
    nginxを起動し、デフォルトのパスに従います
    nginx -t
    構成の正確性をテストしたり、デフォルトの構成パスをクエリーしたりできます.
    Nignx-cパス
    指定されたパス[起動]
    ...]
    nginx -s reload
    スムーズ再起動
    nginx -s stop
    停止nginx
    nginx -v
    nginxのバージョンを表示
    nginx -V
    nginxのバージョン、コンパイラのバージョン、構成パラメータ.
    3.nginx信号
    nginxを起動すると、構成に基づいて1つのmasterプロセスと複数のworkerプロセス(パラメータworker_processesで構成され、一般的にマシンcpuコア数)のmasterが生成され、workerプロセスを管理するので、masterプロセスと通信するだけでいいです.マスタープロセスは外部からの信号を受信し、信号によって異なることをします.Nginxを制御するには、killを介してmasterプロセスに信号を送信するだけでいいです.たとえば、次のようにします.
    kill -HUP pid 
    //    nginx
    //pid nginx   
    //  nginx.conf   pid               Nginx    
    //      pid ,  : '/usr/nginx/logs/nginx.pid'
    

    マスタープロセス:
    しんごう
    コメント
    TERM, INT
    クイッククローズ
    QUIT
    余裕をもって閉じる
    HUP
    構成の再ロード新しい構成で新しい作業プロセスを開始古い作業プロセスを余裕を持って閉じる
    USR1
    ログファイルを再度開く
    USR2
    スムーズアップグレード実行プログラム.
    WINCH
    作業プロセスをゆっくりと閉じる
    ワークプロセス:
    しんごう
    コメント
    TERM, INT
    クイッククローズ
    QUIT
    余裕をもって閉じる
    USR1
    ログファイルを再度開く
    conf構成
    きほんパラメータ
    #    
    user nobody;
    #    ,      cpu     
    worker_processes  2;
    #nginx pid       
    pid        logs/nginx.pid;
    
    events {
        #ulimit -n                  
        #    ,      worker_connections * worker_processes/2
        worker_connections  1024;
    }
    

    ふかへいこう
    httpノードに追加:#負荷等化デバイスのIpおよびデバイス状態の定義
    upstream myServer {   
        server 127.0.0.1:9090 down; 
        server 127.0.0.1:8080 weight=2; 
        server 127.0.0.1:6060; 
        server 127.0.0.1:7070 backup; 
        ip_hash;  
    }
    

    負荷を使用するサーバノードの下に追加
    proxy_pass http://myServer;
    

    upstream各デバイスのステータス:
  • down:シングル前のserverが負荷
  • に一時的に関与しないことを示す.
  • weight:デフォルトは1です.Weightが大きいほど、負荷の重みが大きくなります.
  • max_fails:リクエストの失敗を許可する回数のデフォルトは1です.最大回数を超えるとproxy_が返されますnext_upstreamモジュール定義エラー
  • fail_timeout:max_failsが失敗した後、一時停止した時間.
  • backup:他のすべての非backupマシンがダウンしたり、忙しいときにbackupマシンを要求したりします.だからこの機械の圧力は一番軽いです.

  • ip_hashはロード・バランシング・サーバを使用すると、複数のサーバ間のセッションの共有をどのように実現するかという問題が発生します.その1つがip_ですhash.nginxのip_hashは、あるipの要求を同じバックエンドに指向することができ、このipの下のクライアントとあるバックエンドが安定したセッションを確立することができる.
    nginxプログラミング
    1.nginx変数
    Nginx変数の作成と付与操作は、全く異なる時間段階で発生します.Nginx変数の作成は、Nginx構成がロードされたとき、またはNginxが起動したときにのみ発生します.割り当て操作は、実際の処理を要求したときにのみ発生します.これは、変数を作成せずに直接使用すると起動に失敗し、要求処理時に新しいNginx変数を動的に作成できないことを意味します.
    server {
            listen 8080;
            location /foo {
                echo "foo = [$foo]";
            }
            location /bar {
                set $foo 32;
                echo "foo = [$foo]";
            }
        }
    

    標準ngx_を使用しましたrewriteモジュールのset構成命令は変数$aに値付け操作を行った.特に、文字列hello worldを割り当てました.ここではサードパーティngx_を使用します.echoモジュールのecho構成命令は、$foo変数の値を現在の要求の応答体として出力する.
    私たちはcurlでアドレスにアクセスします.
    $ curl 'http://localhost:8080/foo'     //foo = []
    $ curl 'http://localhost:8080/bar'    //foo = [32]
    

    2.Nginx組み込み変数
    例えばngx_http_coreモジュールが提供する組み込み変数$uriは、$request_uriは、要求の最も元のURI(復号されていない、要求パラメータを含む)を取得するために使用される.しかし、ほとんどの組み込み変数は、類似の保持値を付与できません.
    location /test {
       echo "uri = $uri";
       echo "request_uri = $request_uri";
       echo "name: $arg_name";//name      
    }
    
    $ curl "http://localhost:8080/test?Name=aaa"
     :uri = /test   
     :request_uri = /test
     :name: aaa
     
    $ curl "http://localhost:8080/test?a=3&b=4"
    :uri = /test
    :request_uri = /test?a=3&b=4
    :name:
    

    一部の組み込み変数は書き換えをサポートするが、その一例は$argsである.この変数は、読み込み時に現在の要求のURLパラメータ列(すなわち、要求URLの疑問符の後ろの部分、もしあれば)を返し、付与時に直接パラメータ列を変更することができます.
    location /test {
       set $orig_a $arg_a;
       set $args "a=5";
       echo "original a: $orig_a";
       echo "a: $arg_a";
    }
    
    $ curl 'http://localhost:8080/test?a=3'
    :original a: 3
    :a: 5
    

    元々$arg_aはパラメータa=3を返すべきであるが、アクセス時に$args'a=5'が付与されているので$arg_をとるaは5を返した.
    参照リンク:http://www.ttlsa.com/nginx/nginx-tutorial-from-entry-to-the-master-ttlsa/https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html http://wiki.jikexueyuan.com/project/nginx/nginx-framework.html