Openrestyベストケース|第1編:Nginx紹介


転載は出典を明記してください.http://blog.csdn.net/forezp/article/details/78616591本文は方志朋のブログから
個人ブログの純版:https://www.fangzhipeng.com/openresty/2018/01/01/openresty-best-practice-1-Nginx.html
Nginxの概要
Nginxは高性能のWebサーバであり、同時に効率的な逆エージェントサーバであり、IMAP/POP 3/SMTPエージェントサーバでもある.
Nginxはイベント駆動のアーキテクチャを採用しているため、同時百万レベルのtcp接続を処理することができ、高度なモジュール化設計と自由なBSDライセンスにより、Nginxは非常に豊富なサードパーティモジュールを持っている.例えばOpenresty、APIゲートウェイKong.
BSDオープンソースプロトコルは,利用者に大きな自由を与えるプロトコルである.基本的に利用者は「やりたい放題」で、自由に使用したり、ソースコードを修正したり、修正したコードをオープンソースや独自のソフトウェアとして再配布したりすることができます.
Nginxの利点
  • 高同時応答性能は非常に良く、公式Nginx処理静的ファイル同時5 w/s
  • リバースエージェントのパフォーマンスは非常に優れています.(負荷等化に使用可能)
  • メモリとcpuの使用率が低い.(Apacheの1/5-1/10)
  • バックエンドサービスには健康診断機能があります.
  • はPHP cgi方式とfastcgi方式をサポートしている.
  • 構成コードは簡潔で使いやすい.

  • Nginxのインストール
    Centosシステムのインストールは、こちらを参照してくださいhttp://www.linuxidc.com/Linux/2016-09/134907.htm.貼り付けた文章をコピーします.
    1.gcc取付
    nginxをインストールするには、まず公式サイトでダウンロードしたソースコードをコンパイルする必要があります.コンパイルはgcc環境に依存します.gcc環境がなければ、インストールする必要があります.
    yum install gcc-c++
    2.PCRE pcre-develインストール
    PCRE(Perl Compatible Regular Expressions)は、Perl互換性のある正規表現ライブラリを含むPerlライブラリです.nginxのhttpモジュールはpcreを使用して正規表現を解析するため、linuxにpcreライブラリをインストールする必要があります.pcre-develはpcreを使用して開発された二次開発ライブラリです.nginxにもこのライブラリが必要です.コマンド:
    yum install -y pcre pcre-devel
    3.zlibインストール
    zlibライブラリは圧縮と解凍の方法を多く提供しており、nginxはzlibを使用してhttpパッケージの内容をgzipするため、Centosにzlibライブラリをインストールする必要があります.
    yum install -y zlib zlib-devel
    4.OpenSSLインストール
    OpenSSLは強力なセキュリティソケット層暗号ライブラリであり、主な暗号アルゴリズム、一般的な鍵と証明書パッケージ管理機能、SSLプロトコルを網羅し、テストやその他の目的で豊富なアプリケーションを提供しています.nginxはhttpプロトコルだけでなく、http(すなわち、sslプロトコル上でhttpを転送する)もサポートするので、CentosにOpenSSLライブラリをインストールする必要があります.
    yum install -y openssl openssl-devel
    5.公式サイトのダウンロード
    1.直接ダウンロードtar.gzインストールパッケージ、アドレス:https://nginx.org/en/download.html
    2.wgetコマンドを使用してダウンロードします(推奨).
    wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
    6.解凍
    直接コマンド:
    tar -zxvf nginx-1.10.1.tar.gz cd nginx-1.10.1
    7.構成
    実はnginx-1.10.1バージョンでは、関連するものを構成する必要はありません.デフォルトでいいです.もちろん、自分でディレクトリを構成してもいいです.デフォルト設定の使用
    ./configure
    8.コンパイルインストール
    make make install
    インストールパスを検索するには、次の手順に従います.
    whereis nginx
    Nginxのモジュール構成
    Nginxのモジュールは、コアモジュール、ベースモジュール、サードパーティモジュールに構造的に分けられます.
  • コアモジュール:HTTPモジュール、EVENTモジュール及びMAILモジュール
  • 基礎モジュール:HTTPアクセスモジュール、HTTP FastCGIモジュール、HTTP ProxyモジュールとHTTP Rewriteモジュール、
  • サードパーティモジュール:HTTP Upstream Request Hashモジュール、Noticeモジュール、HTTP Access Keyモジュール.

  • Nginxの高同時性は、epollモデルを採用したおかげで、従来のサーバプログラムアーキテクチャとは異なり、epollはlinuxカーネル2.6以降に現れたものです.Nginxはepollモデルを採用し,非同期非ブロックであり,Apacheはselectモデルを採用した.
  • Selectの特徴:selectがハンドルを選択する場合、すべてのハンドルを巡回します.つまり、イベント応答がある場合、selectはすべてのハンドルを巡回してイベント通知を取得する必要があります.そのため、効率は非常に低いです.
  • epollの特徴:epollはハンドルイベントの選択に対して遍歴的ではなく、イベント応答的であり、ハンドル上のイベントが来たらすぐに選択され、ハンドルチェーンテーブル全体を遍歴する必要がないため、効率が非常に高い.

  • Nginx共通コマンド
    nginx環境変数の構成:
    export PATH=$PATH:/usr/servers/nginx/sbin
  • nginxプロセスps-ef|grep nginx
  • を表示
  • 起動nginx nginx起動結果は、nginxのメインスレッドとワークスレッド、ワークスレッドの数とnginxを示す.confの構成パラメータworker_プロセス関係.
  • スムーズ起動nginx kill-HUP cat /var/run/nginx.pidまたはnginx-s reload
  • 強制停止nginx pkill-9 nginx
  • 検査対nginx.confファイルの変更が正しいかnginx-t
  • nginxを停止するコマンドnginx-s stopまたはpkill nginx
  • nginxのバージョン情報を表示nginx-v
  • 完全なnginxの構成情報を表示nginx-V
  • Nginxの構成
    通常、Nginxの構成は、Ngixのインストールディレクトリの下の/conf/configにある.defaultファイルでは、基本的な構成は次のとおりです.
    worker_process #          ,     cpu   
    
    worker_connections #               
    
    server{} #         
        listen #     
        server_name #     
        location {} #         URI     ,URI      “/uri/”
        location /{} #       ,         /   
            root #     uri       ,  html     ,     
            # /opt/nginx-1.7.7/html/
            index #     index     ,      ,     。   
            #  ,       。
    
    

    locationの一般的な構成は次のとおりです.
    を選択します.
    意味
    location =/uri
    =完全一致のみ有効な正確な一致を示します.
    location ^~/uri
    ^~先頭にURLパスを接頭辞で照合し、正則の前にします.
    location ~ pattern
    先頭は大文字と小文字を区別する正規一致を表します
    location ~* pattern
    大文字と小文字を区別しない正規一致を先頭に表示
    location/uri
    修飾子なし、接頭辞マッチングも表しますが、正規マッチングの後
    location/
    汎用マッチングでは、switchのdefaultに相当する他のlocationに一致していないリクエストが一致します.
    Nginxの一般的な構成は非常に多く、以下の内容はブール教育の授業から抜粋されています.参考にしてください.
    
    #  Nginx         
    user  www www;
    #    ,      cpu     
    worker_processes  8;
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    #       cpu,    8      8 cpu,       ,            cpu。
    worker_rlimit_nofile 102400;
    #         nginx              ,         
    #    (ulimit -n) nginx     ,  nginx           
    #,     ulimit -n      。
    
    #       PID  
    error_log  /usr/local/nginx/logs/error.log; 
    #        ,[ debug | info | notice | warn | error | crit ]
    pid        /usr/local/nginx/nginx.pid;
    
    #  nginx              ,             (    ulimit -n) nginx     ,  nginx        .
    #     ulimit -n      。
    worker_rlimit_nofile 65535;
    
    #          
    events {
        use   epoll;             	#epoll     IO(I/O Multiplexing)      ,     linux2.6    ,      nginx   
        worker_connections  102400;	#    worker process           (     =   *   )
        multi_accept on; #         
    }
    #  http   ,                  
    http {
        #  mime  ,   mime.type    
        include       mime.types;
        default_type  application/octet-stream;
        #      
        access_log    /usr/local/nginx/log/nginx/access.log;
    	 sendfile      on;
        #sendfile      nginx      sendfile   (zero copy   )     ,           on
    	#             IO     ,     off,        I/O    ,     uptime.
    	#autoindex  on;  #        ,       ,    。
    	tcp_nopush on; #      
    	keepalive_timeout 60;
    	#keepalive    ,                 ,         ,    ,keepalive-timeout              。
        tcp_nodelay   on; #          
       #  gzip  
       gzip on;
    	gzip_min_length  1k;
    	gzip_buffers     4 16k;
    	gzip_http_version 1.1;
    	gzip_comp_level 2; #      ,   9,   ,       ,CPU    。
    	#   ,  CPU   。
    	gzip_types       text/plain application/x-javascript text/css application/xml;
    	gzip_vary on;
    	client_max_body_size 10m;      #                
        client_body_buffer_size 128k;  #                  ,
        proxy_connect_timeout 90;      #nginx            (      )
        proxy_send_timeout 90;         #           (      )
        proxy_read_timeout 90;         #     ,         (      )
        proxy_buffer_size 4k;          #       (nginx)             
        proxy_buffers 4 32k;           #proxy_buffers   ,     32k    ,    
        proxy_busy_buffers_size 64k;   #        (proxy_buffers*2)
    	
        #      
        large_client_header_buffers  4 4k;
    	client_header_buffer_size 4k;
    	#             ,                 ,               1k
    	#              1k,           。         getconf PAGESIZE  。
    	open_file_cache max=102400 inactive=20s;
    	#            ,        ,max      ,          ,inactive                   。
    	open_file_cache_valid 30s;
    	#                   。
    	open_file_cache_min_uses 1;
    	#open_file_cache    inactive              ,        ,               ,   ,        inactive
        #        ,         
        include vhosts.conf;
    }
    
    

    構成の詳細2は次のとおりです.
    
    	#        wugk      ,            ,tdt_wugk       ,      
    	#    vhosts.conf     pass   ,           。weight    , fail_timeout   max_fails  ,       。
    	upstream tdt_wugk {
    		server   127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
    		server   127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
    	}
       #      
    	server {
    		#  80  
            listen       80;
            #    www.wuguangke.cn  
            server_name  www.wuguangke.cn;
            #            
            access_log  logs/access.log  main;
    			root   /data/webapps/wugk;  #               
            index index.php index.html index.htm;   #           
            #    
            location ~ /{
              root   /data/www/wugk;      #               
              index index.php index.html index.htm;   #           
              #            .
    		  proxy_next_upstream http_502 http_504 error timeout invalid_header;
    		  #          502、504、       ,        upstream             ,      。
              proxy_redirect off;
              #   Web       X-Forwarded-For      IP
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    		   proxy_pass  http://tdt_wugk;     #             
           }
    	   
            #         
    			error_page   500 502 503 504 /50x.html;  
                location = /50x.html {
                root   html;
            }
    		#  Nginx    ,          Nginx      。
    		location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
    		{
    			root /data/www/wugk;
    			#expires             3 ,          ,      ,                 。
    			expires      3d;
    		}
            #PHP          FastCGI  .   FastCGI    .
            location ~ \.php$ {
                root /root;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /data/www/wugk$fastcgi_script_name;
                include fastcgi_params;
            }
            #    Nginx     
            location /NginxStatus {
                stub_status  on;
            }
         }
    }
    
    

    Nginx内蔵バインド変数
    名前
    説明
    $arg_name
    リクエストのnameパラメータ
    $args
    要求のパラメータ
    $binary_remote_addr
    リモートアドレスのバイナリ表示
    $body_bytes_sent
    送信されたメッセージボリュームバイト数
    $content_length HTTP
    リクエストメッセージの「Content-Longth」
    $content_type
    リクエスト情報の「Content-type」
    $document_root
    現在のリクエストに対するルートパスの値の設定
    $host
    要求情報の「Host」は、要求にHost行がない場合に設定されたサーバ名に等しい
    $hostname
    マシン名gethostnameシステム呼び出しの値を使用する
    $http_cookie
    クッキー情報
    $http_referer
    リファレンスアドレス
    $http_user_agent
    クライアントエージェント情報
    $http_via
    最後のアクセスサーバのIpアドレス.
    $http_x_forwarded_for
    ネットワークアクセスパスに相当
    $is_args
    要求行にパラメータがある場合は「?」を返します.そうでなければ空の文字列を返します
    $limit_rate
    接続速度の制限
    $nginx_version
    現在実行されているnginxバージョン番号
    $pid worker
    プロセスのPID
    $query_string
    argsと同じ
    $realpath_root
    root命令またはalias命令で算出された現在の要求の絶対パス.シンボルリンクはファイルパスとして解析され、Nginx内蔵バインド変数を使用します.
    207$remote_addr
    クライアントIPアドレス
    $remote_port
    クライアントポート番号
    $remote_user
    クライアントユーザ名、認証用
    $request
    ユーザー要求
    $request_body
    この変数(0.7.58+)には、リクエストの主な情報が含まれます.proxy_を使用passまたはfastcgi_pass命令のlocationで比較的意義がある
    $request_body_file
    クライアント要求マスター情報の一時ファイル名
    $request_completion
    要求が成功した場合は「OK」とする.要求が完了していないか、または一連の要求の最後の部分でない場合は、空に設定します.
    $request_filename
    現在要求されているファイルパス名、例えば/opt/nginx/www/test.php
    $request_method
    「GET」「POST」など、リクエストの仕方
    $request_uri
    要求されたURI、パラメータ付き
    $scheme
    httpやhttpなどのプロトコルが使用されます
    $server_addr
    サーバアドレス、listenでサーバアドレスを指定しない場合、この変数を使用すると、アドレスを取得するためにシステム呼び出しが開始されます(リソースの浪費をもたらします).
    $server_name
    要求されたサーバ名
    $server_port
    要求されたサーバーポート番号
    $server_protocol
    要求されたプロトコルバージョン、「HTTP/1.0」または「HTTP/1.1」
    $uri
    リクエストされたURIは、リダイレクトされたものなど、最初の値とは異なる場合があります.
    参考資料
    http://www.linuxidc.com/Linux/2016-09/134907.htm
    https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx/nginx.html
    ブール教育の授業
    詳細
    史上最も簡単なSpringCloudチュートリアルの概要
    SpringBootチュートリアルの概要
    Java面接問題シリーズまとめ
    Openresty最佳案例 | 第1篇:Nginx介绍_第1张图片スキャンコード公衆番号に注目サプライズ
    (当駅の文章を転載するには作者と出典方志朋のブログを明記してください)