nginxの構成とインフラ

プロパティ

  1. モジュラーデザイン、優れたスケーラビリティ、動的ロード。
  2. ハイアベイラビリティ
  3. これは、ログファイルを置き換え、熱い展開、ノンストップ更新設定ファイル、バージョンアップをサポートしています。
  4. 低メモリ消費、約2.5M非アクティブモードでの10Kキープアライブ接続。
  5. イベント駆動型モデル、AIO、MMAP、sendfileの。

従来の伝送ネットワーク

硬盘>>カーネルバッファ>>ユーザバッファ>>カーネルソケットバッファ>>协议栈

  1. カーネルモードへのユーザモードからスイッチした後、カーネルバッファにハードディスクからのファイルのデータを読み取るために、コピーDMAを実行します。システムコールは、コンテキストスイッチを発生させるために()をお読みください。
  2. 次いで、システム呼び出しリードに戻る()、およびコンテキストスイッチを製造する時、ユーザバッファにカーネルバッファからデータをコピーする:ユーザーモードにカーネルモードから切り替えます。
  3. カーネルモードへのユーザモードからスイッチは、次いで、データ(第2データがカーネルバッファにコピーされた)カーネルバッファバッファユーザーにコピーされ、ステップ2で読み込んだが、これは別のカーネルである:システムコールライト()はコンテキストスイッチを発生させます、バッファおよび関連するソケットバッファ。
  4. システムコールライト()戻り、コンテキストスイッチを発生:ユーザーモードにカーネルモードからの切り替え、その後DMAは、プロトコルスタックからデータをコピーするためのバッファカーネル。

オープニングsendfileをした後、

ハードディスクは>>プロトコルスタック(高速kernelsocketバッファにコピー)バッファカーネル

  1. DMAによるのsendfileシステムコールは()バッファカーネルハードディスクにデータをコピーし、そのデータをソケット別に関連付けられたカーネルバッファカーネルに直接コピーされます。ユーザーモードとカーネルモードの間には切り替えがありませんが、カーネルは別のバッファにバッファのコピーから直接実行されます。
  2. DMAデータを直接kernelbufferするスタックからコピーされ、それは、単にカーネル内のデータので、カーネルモードへのユーザーモードからデータをコピーする必要はありませんしません。
  3. sendfileを読み取りおよび書き込みシステム・インタフェースよりも高いパフォーマンスは、のsendfileまた、out_fdにコンテンツin_fdはを送信することですが、in_fdははファイルハンドルであるソケット、することはできません。
  4. nginxのは、静的なファイルサーバがある場合は、オープンSENDFILE設定項目が大幅にnginxののパフォーマンスを向上させることができます。
  5. 場合nginxのSENDFILEは無用である場合、nginxのは、リバースプロキシ場合ので、使用するリバースプロキシとして。in_fdはそれはファイルハンドルのソケットではありませんが、この場合はsendfileの関数パラメータの要件を満たしていません。

要約すると、sendfileを大幅に起因する伝送ソケットにパフォーマンス、リバースプロキシを高めることができるだけで、ハンドルパラメータを受け入れることができますソケットファイルを受信できない、静的なサーバを開いて、開く必要はありません。

nginxの基本的な機能

  1. 静的リソースのWebサーバが道のPHPモジュールをサポートしていない、サポートが唯一のphp-FPM(TCP:9000、FastCGIの通信)をインストールし、内部のApacheモジュールのサポートは、PHPがあります。
  2. リバースプロキシサーバーは、nginxのによってスケジュール7、LVS機能よりも強いため、複数のバックエンドWebサーバーをセットアップし、弱いパフォーマンスは、同時実行性の理論は、nginxの300万、4,000,000 LVS。
  3. あなたがクライアントとして、サーバ、nginxのようにアクセス動的なリソース、FastCGIをする場合はLNMPアーキテクチャは、;構造は、クライアントのためにする必要があります - > nginxのサーバー - > PHP-fpm-> DB。
  4. uWSGIジャンゴベースのサーバ、パイソンに類似LNMP、PHP:クライアント - > nginxのサーバは、 - > python-> DB(Djangoは、通信がuWCGIです)。
  5. 動的なロードとアンロードモジュール。

Webサーバ機能

  1. Webホスティング:バーチャルホスト、include.d。
  2. 支持体は、キープアライブおよびパイプラインへのリンク。
  3. アクセスログ(そのパフォーマンスを向上させるために、バッファベースのサポートを記録)。
  4. 書き換えURL:新しいアドレスにリダイレクト訪問した後。
  5. パスエイリアス:エイリアスエイリアスは、フォルダにジャンプ。
  6. IPおよびユーザー・アクセスコントロール、スピード、同時リンクの数を制御することができます。
  7. 再構成とオンラインアップグレード暖房運転。
  8. GET Memcachedのインターフェース。

nginxのアーキテクチャ

  1. マスタ作業者の少数(1C相当1worker、または直接オート)を起動し、管理、作業者がオープン多くのスレッドではない、スレッドは見ることができないが、IOの唯一の様々な処理は、多重化。
  2. これは、各ワーカー異なるモジュールの内部に、完全なHTTP、FastCGIの、memcacheの機能の例が含まれていました。
  3. プロキシキャッシュ機能は、ローカルキャッシュがアクセス効率を向上させ、フォローアップのクライアントのアクセスを容易にするために、保持しています。
    nginxのプログラムの構造
  4. プロセスがどのスレッドではありません、IO多重化は、労働者はより多くの要求を受信します。
  5. モジュールカテゴリー:コア、標準、3ウェイ
  6. コアモジュール:コアモジュールと標準モジュール:HTTPモジュール(バックエンドHTTPサーバ)、メールモジュール、ストリームモジュール(データベースをスケジュールすることができる);三者モジュール
  7. 頻繁に理解するためにも使用されているため、あまりモジュール。

nginxのの機能

  1. 静的なWebサーバー、HTML、JPG、CSS、JS、TXTおよびその他の静的リソースにアクセスすることができます。
  2. プロトコルプロキシに向かってのFastCGI、uWSGI、SCGI他の動的リソース要求を結合。
  3. TCP / UDPプロトコルの転送を要求します。
  4. バックエンドサーバのLVSが等しいLVSは透明であり、アクセスクライアントで参照しながら、リバースプロキシは、バックエンドサーバーnginxのnginxのは、IP見られています。

nginxのソースインストールシェルスクリプト
<>行くために多くのインターネットを書いた後、私が書き込みするのが面倒でした

nginxのインストール

  1. httpsを複数の仮想ホストをサポートするためのサーバー:nginxの-Vを使用してインストールはRed HatがTLS SNIサポートが有効になってデフォルトで有効になって見ることができた後、EPELリリース源は、含まれている
    Apacheの中に、サーバーがhttps唯一の仮想ホストを可能に。
  2. /etc/nginx/conf.d/は、それぞれ複数の仮想ホストをサポートするの.conf /etc/nginx/nginx.confが含まれているメインの設定ファイルに、サーバーを書くために.confファイルを。
  3. グローバルモジュールがHTTPである{...}前に、HTTPは{}を含む多くのサーバ{...}、各サーバは、仮想ホストを定義するために使用されます。

nginxのグローバル設定

次のようにコンフィギュレーションファイルは、次のとおりです。

user nginx;                    //安装nginx时候就创建了
worker_processes auto;         //多少个CPU对应多少个work进程,用auto即可
worker_rlimit_nofile 65535;    //这个一定要写,支持多少用户并发

# (worker_cpu_affinity auto) 或者直接根据CPU个数绑定   //CPU绑定,提高命中缓存几率,亲缘性
# 4c: (worker_cpu_affinity 0001 0010 0100 1000)
# 8c: (worker_cpu_affinity 00000001 00000010 ...)
# ps axo pid,cmd,psr |grep nginx    //查看当前worker都是绑定在哪个CPU上的

# worker_priority <num>;     //[-20,19],指定nice值,越小优先级越高

error_log /var/log/nginx/error.log;     //错误日志所在位置,可以发送到远程日志服务器上
                //还可以定义日志级别 debug|info|notice|warn|error|crit|alert|emerg
pid /run/nginx.pid;                     //pid所在文件夹

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;    //使用include可供选择模块放在不同地方
# load_module <file>;                       //具体加载哪个模块
# daemon on|off;                            //nginx是否编程一个后台守护进程,默认就是on,
                                            //如果off后再启动nginx就会卡在界面上,适合调试测试环境
# master process on|off;                    //默认是on的,如果off,重启后只有一个nginx进程,不会出现master_worker多个进程
/* 
这段没什么说的,文件打开最大用户数和最大进程数
vim /etc/security/limit.conf 
#hard limit ,嚴格的設定,必定不能超過這個設定的數值;
#soft limit ,警告的設定,可以超過這個設定值,但是若超過則有警告訊息。 
*   soft noproc   65535  
*   hard noproc   65535  
*   soft nofile   65535  
*   hard nofile   65535 
 */
events {
    worker_connections 1024;  //每个worker支持的最大连接数,总数:worker_processes * worker_connections
    use epoll;                //默认就是epoll,写不写都行
    # accept_mutex on|off;    //默认on就好了,来了连接几个worker轮流处理,off的话则会惊群可能造成性能下降。
}

nginxのHTTP設定:

最も重要な部分:ngx_http_core_module

ソケットの構成:

   server {                           //这个可以定义在conf.d的文件夹下
       listen [:PORT]PORT;            //监听地址和端口,default为 *:80,IP:PORT也可以,可以绑定具体ip或所有ip。                 
       server_name SERVER_NAME;       //一般都是www.xx.com类似域名
       location {
      		 root /PATH/TO/HTML/LOCATION;   //可以写绝对路径,如果是相对路径要看default root是哪儿,yum安装/usr/share/nginx/html/为根目录
       }                                      
   }	                             //root 对应路径下必须为 index.html,否则403 forbbiden

聞きます[]

  1. PORT | IP:PORT | UNIXの場合:<ソケットの位置>、フォーマットのこれらのタイプはサポートされています。
  2. DEFAULT_SERVER一般的にバックで使用されるキーワードは、アドレス、IPポート番号なしのデフォルトのアクセスを聞くために、デフォルトのサーバーのWebホスティングを選択します。
  3. SSL:SSL接続には、サービスを提供することができるだけ限定されています。
  4. バックログ=:バックアップキューは、新しいバックアップ要求は、それが何を意味するのか、キューの長さは、例えば、接続5000 = 6000 2万人以上の同時接続が設定されて入る、セッション後に最大制限を超えています。
  5. rcvbuf =:バッファサイズ、nginxのクライアントアクセス時間を受け取り、バッファの最初のキューに置かれ;
    sndbuf =:また、第一のバッファ・キューに、クライアントにデータを返すnginxの、送信バッファサイズ。

サーバーネーム []

  1. サポートワイルドカードと正規表現のマッチング:サーバー名〜* .a.comは、限り、あなたは判断できるように設定ワイルドカードDNSで、xacomサイトが初期www.a.comに最終的に送られます。
  2. マッチモードが推奨されていない、正確に最適なサイトをサーバリソースを消費します。

LOCATION []は{...}サーバー{...}と位置を配置することができます

  1. 理解されなければならないルートで定義された区別と場所以外の場所を

  2. ルート:この良い場所を決定するために、何も言うこと、サイトのパス、ルートディレクトリではありません、場所を外に配置することができますが、ファイルを指すことができます。

  3. LOCATION / ...
    // URLの一部を、対応する場所は、この文を理解することを確認し、場所/手段をくそことのhttp:// <URL> /たわごと/このパス。

  4. ルートとの位置関係を理解し​​ます:

    location /shit {        // URL:http://www.xx.com/shit/ 这个是URL拼接
       root /data/damn      // 真实路径 /data/damn/shit/<xx资源>,真实存在的东西
       }
       // 如果访问 http://<网址>/shit/<xx资源> 这个路径,
       // 取得的资源是在 /data/damn/shit/<xx资源>,这时location外部的root定义时不生效的
    
  5. 場所ファイルへ= /index.htmlが{...} //完全一致、のみアクセスできます。http:// <URL> /、物事は少し背後には、完全一致、HTTPではないです:// <URL> / xxは適切ではありませんA。

  6. 優先発行場所、位置優先一致がある場合、ルートは、外部定義よりも高い、低い優先度〜^ = {に高い/即ち最低の優先順位/ XX}、符号なし *。

    生产中一般不会弄得这么复杂,消耗CPU计算资源
    Let’s illustrate the above by an example:
    
    location = / {            //匹配优先级最高       
        [ configuration A ]
    }
    
    location / {              //如果上面不匹配才轮到这儿,优先级最低
        [ configuration B ]
    }
    
    location /documents/ {    //比 / 更精确
        [ configuration C ]
    }
    
    location ^~ /images/ {    //左匹配比右匹配优先级高
        [ configuration D ]
    }
    
    location ~* \.(gif|jpg|jpeg)$ {     //右匹配比不带任何符号的优先级高,即大于B,C
        [ configuration E ]
    }
    /*
    The “/” request will match configuration A, 
    the “/index.html” request will match configuration B, 
    the “/documents/document.html” request will match configuration C, 
    the “/images/1.gif” request will match configuration D,
    the “/documents/1.jpg” request will match configuration E.
    */
    
  7. エイリアス/ XXおよびルート/ XX区別の
    エイリアスのみ位置で使用することができます

    location /shit {
    	root /xx         //匹配 /xx/shit/下的资源
    	alias /xx        //匹配 /xx下的资源,alias相当于覆盖
    }
    
  8. あなたがあなた自身の404ページを定義することができますので、以下に定義するエラーページ、

    error_page 404 /404.html;
    	location /404.html {
        	root /data/a/error/;
    	}
    

    ブラウザ404ページ360をハイジャック防止するために、以下のプロトコールは、ハイジャックページを防止するために使用されてもよいです。

    error_page 404 =200 /404.html;         //404依旧是404,但是对于浏览器响应头返回的是200,这样360就会认为这是个正常的页面,不会劫持了
     	location /404.html {
         	root /data/a/error/;
     	}
    
  9. try_files XX XX XX XX:検査の順序に従って、前のn-1が存在しない場合に、最後のリダイレクトなどの最終的なXXを返します。

第二に、他のHTTP {...}の設定項目

  1. 上のTCP_NODELAY |オフ:
    キープアライブモードの接続がTCP_NODELAYオプションが有効になっている:あなたは内部のサーバーと場所を使用することができます
    オフの送信時間遅延して、複数の要求を組み合わせて、サーバー上の//少し圧力が、一緒に取得顧客体験に影響送る
    のを遅延は送信Aに送信されていないとき。//サーバが消費したが、顧客の経験は、一般的に開いて、良いです。

  2. sendfileをON | OFF:
    オフデフォルトでは、あなたがリバースプロキシサーバーにこれを設定することはできません。しかし、アクセスの静的リソースが強くプロセスの保存を開始してからユーザ空間にコピーカーネルからsocketbufカーネルを送信することをお勧めします。

  3. オフ| |上server_token構築|文字列
    : 使用可能なサーバーのレスポンスヘッダをメッセージ表示nginxのバージョン、サーバーおよび場所かどうか
    、ネットワークのセキュリティは非常に安全です暴露nginxのバージョンを、簡単な攻撃に対する脆弱性の対応バージョンを見つけるためにハッカーのために、それが推奨されますセキュリティを向上させるために、オフに使用します。
    この商用版は、まさにこのようなJingdongのサイトなどの一部の文字列を、書いて、そのサーバー名JDWS、ないnginxのを発見し、文字列を指定できます。

  4. keepalive_timeout:一般設定30秒、交通状況に応じました。

  5. keepalive_requests:リソース要求の最大接続数の再びの長さ。

  6. keepalive_disableなし|ブラウザ:ブラウザが長い接続を防止しています。

  7. send_timeout <時間>:クライアントへの応答パケットの長さがタイムアウトを送信します。

  8. 128K client_body_buffer_size:
    パケットのボディ部、デフォルト16Kのクライアント要求バッファサイズを受信し、スクラッチディスクのサイズ超え
    :client_max_body_sizeの10Mは、
    クライアント要求メッセージ本体を受信し、最大10Mのある
    ; client_body_temp_path 1 2 2。
    client_body_temp_path後フォルダ部はハッシュ値で構成され、各ファイルは、バック5から取られたハッシュ値の計算を有し、最終的な体の比、形成/ 1/2/2ファイルパスパターン記憶部によって割り当てられた122。

公開された49元の記事 ウォン称賛18 ビュー3999

おすすめ

転載: blog.csdn.net/weixin_41047549/article/details/90321744