C ++バックエンドプログラマーは、原則から実際の戦闘まで、Nginxを完全に理解する必要があります

この記事では、最初にNginxリバースプロキシ、負荷分散、動的および静的分離、高可用性の原則を紹介し、次にNginx構成ファイルについて詳しく説明し、最後に実際のケースを通じてNginxリバースプロキシと負荷分散の特定の構成を実現します。Nginxを学びましょう。1つの記事で十分です。

1はじめに

  Nginxは、オープンソースの軽量Webサーバー、リバースプロキシサーバー、ロードバランサー、HTTPキャッシュです。これは、高い同時実行性、高いパフォーマンス、および少ないメモリを特徴としています。
  Nginxは、パフォーマンスの最適化のために特別に開発されています。パフォーマンスは最も重要な考慮事項です。実装の効率に細心の注意を払い、高負荷のテストに耐えることができ、最大50,000の同時接続をサポートできます。Nginxはホットデプロイメントもサポートしており、特に使いやすく、ほぼ1日7x24時間実行できます。Nginx Webサイトのユーザーには、Baidu、Taobao、JD、Tencent、Sina、NetEaseなどが含まれます。

2.リバースプロキシ

2.1フォワードプロキシ

  Nginxは、負荷分散を実現するためのリバースプロキシとしてだけでなく、インターネットアクセスやその他の機能のためのフォワードプロキシとしても使用できます。

 

æ£å代çåçå¾

2.2リバースプロキシ

  クライアントはプロキシサーバーを認識せず、クライアントは構成を行う必要がなく、ユーザーはリバースプロキシサーバーを要求するだけで、リバースプロキシサーバーはターゲットサーバーを選択し、データを取得した後にクライアントにデータを返します。リバースプロキシサーバーとターゲットサーバーは外部に1つのサーバーであり、プロキシサーバーのアドレスのみが公開され、実サーバーのIPアドレスは非表示になります。

 

åå代çåçå¾

3.負荷分散

  単一のサーバーに集中している元の要求を変更してサーバーの数を増やしてから、要求を各サーバーに分散し、負荷を異なるサーバーに分散します。つまり、負荷分散です。

 

è´è½½åè¡¡åçå¾

4.動的と静的の分離

  Webサイトの分析速度を高速化するために、静的ページと動的ページを異なるサーバーで解析して、分析速度を高速化し、元の単一サーバーの負荷を軽減することができます。

 

å¨éå离åçå¾

5.高可用性

  システムの可用性とフォールトトレランスを向上させるために、nginxサーバーの数を増やすことができます。プライマリサーバーに障害が発生したりダウンしたりした場合、バックアップサーバーは中断のない作業のプライマリサーバーとしてすぐに機能できます。

は«å¯ç¨åçå¾

は«å¯ç¨åçå¾

C / C ++ Linuxバックエンド開発ネットワークのボトムレベルの原則知識の学習と改善についてもっと共有し、テクノロジースタックを改善し、コンテンツの知識ポイントにはLinux、Nginx、ZeroMQ、MySQL、Redis、fastdfs、MongoDB、ZK、ストリーミングメディア、CDNが含まれます、P2P、オーディオビデオ開発、Linuxカーネル、Docker、TCP / IP、coroutine、DPDKなど。

ビデオ学習資料をクリックしてください:C / C ++ Linuxサーバー開発/ Linuxバックグラウンドアーキテクト-学習ビデオ

6.Nginx構成ファイル

6.1ファイル構造

  Nginx構成ファイルは3つの部分で構成されています。

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
复制代码
  • グローバルブロックの最初の部分は、
      主にnginxサーバーの全体的な操作に影響を与えるいくつかの構成命令を設定します。
      例:worker_processes 1;、worker_processesの値が大きいほど、より多くの並行処理をサポートできます。
  • eventsブロックの2番目の部分
      eventsブロックには、主にNginxサーバーとユーザー間のネットワーク接続に影響を与える命令が含まれます。
      例:worker_connections 1024;、サポートされる接続の最大数。
  • 3番目の部分のhttpブロック
      httpブロックには、httpグローバルブロックとサーバーブロックが含まれます。これは、プロキシの構成、キャッシュ、ログ定義などのほとんどの機能を含む、サーバー構成の最も頻繁な部分です。サーバーブロック:仮想ホストの関連パラメーターを構成します。ロケーションブロック:リクエストルーティングとさまざまなページの処理を構成します。

6.2構成ファイル

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}   
复制代码

7.構成例

7.1リバースプロキシ

7.1.1実際の戦闘1

実現効果:
  ブラウザにwww.abc.comと入力し、nginxサーバーからLinuxシステムのTomcatのメインページにジャンプします。
特定の構成:

    server {
        listen       80;   
        server_name  192.168.4.32;   #监听地址
   
        location  / {       
           root html;  #/html目录
           proxy_pass http://127.0.0.1:8080;  #请求转向
           index  index.html index.htm;      #设置默认页       
        } 
    }
复制代码

7.1.2実際の戦闘2

実現効果:
  ブラウザに入力されたパスに従って、別のポートのサービスにジャンプします。
特定の構成:

    server {
        listen       9000;   
        server_name  192.168.4.32;   #监听地址       
        
        location  ~ /example1/ {  
           proxy_pass http://127.0.0.1:5000;         
        } 

        location  ~ /example2/ {  
           proxy_pass http://127.0.0.1:8080;         
        } 
    }
复制代码

位置指示の説明:

  • 〜: uriには正規表現が含まれており、大文字と小文字が区別されます。
  • 〜*: uriには正規表現が含まれており、大文字と小文字は区別されません。
  • =: uriに正規表現が含まれておらず、厳密な一致が必要であることを示します。

7.2負荷分散

7.2.1実際の戦闘1

実現効果:負荷分散効果を実現するに
  は、ブラウザのアドレスバーにhttp://192.168.4.32/example/a.htmlと入力し、平均で5000ポートと8080ポートにします。
特定の構成:

    upstream myserver {   
      server 192.167.4.32:5000;
      server 192.168.4.32:8080;
    }
    

    server {
        listen       80;   #监听端口
        server_name  192.168.4.32;   #监听地址
   
        location  / {       
           root html;  #html目录
           index index.html index.htm;  #设置默认页
           proxy_pass  http://myserver;  #请求转向 myserver 定义的服务器列表      
        } 
    }
复制代码

Nginx割り当てサーバー戦略

  • ポーリング(デフォルト)は
      、リクエストの時系列に従って1つずつ割り当てられます。サーバーがダウンしている場合は、自動的に削除できます。

  •   重量が高いほど、より多くのクライアントが割り当てられます、デフォルトは1です。例:upstream myserver {server 192.167.4.32:5000 weight = 10; server 192.168.4.32:8080 weight = 5;}
  • IP
      は、要求されたIPのハッシュ値に従って割り当てられ、各訪問者はバックエンドサーバーへの固定アクセス権を持ちます。例:アップストリームmyserver {ip_hash; server 192.167.4.32:5000; server 192.168.4.32:8080;}

  •   バックエンドサーバーの応答時間に応じてFairが割り当てられ、応答時間が短い要求が優先的に割り当てられます。例:upstream myserver {fair; server 192.167.4.32:5000; server 192.168.4.32:8080;}

  おめでとう!これまでにNginxの基本原則を習得し、リバースプロキシと負荷分散を構成できます。

C / C ++ Linuxバックエンド開発ネットワークのボトムレベルの原則知識の学習と改善についてもっと共有し、テクノロジースタックを改善し、コンテンツの知識ポイントにはLinux、Nginx、ZeroMQ、MySQL、Redis、fastdfs、MongoDB、ZK、ストリーミングメディア、CDNが含まれます、P2P、オーディオビデオ開発、Linuxカーネル、Docker、TCP / IP、coroutine、DPDKなど。

ビデオ学習資料をクリックしてください:C / C ++ Linuxサーバー開発/ Linuxバックグラウンドアーキテクト-学習ビデオ

 

おすすめ

転載: blog.csdn.net/Linuxhus/article/details/114371760