ホームページ  >  記事  >  バックエンド開発  >  Nginxシナリオの練習

Nginxシナリオの練習

不言
不言オリジナル
2018-05-07 11:05:511452ブラウズ

この記事では主に Nginx に関する実践を紹介します。これを必要とする友人に共有します

1. 動的リソースと静的リソース。リソース

クライアントによって要求されたページが静的 Web ページの場合、サーバーは静的 Web ページのコンテンツをクライアントに直接応答します。クライアントが動的 Web ページをリクエストした場合、サーバーはまず動的 Web ページを静的 Web ページに置き換えてから、変換された静的 Web ページにクライアントに応答する必要があります

数種類の静的リソース

    ブラウザのレンダリング: HTML、CSS、JAVASCRIPT
  • 写真: JPEG、GIF、PNG...
  • ビデオ: FLV、MPEG...
  • ファイル: TXTなど、任意のダウンロードファイル
  • 2 , CDN(Content Delivery Network)コンテンツ配信ネットワーク

基本的な考え方は、データ伝送の速度と安定性に影響を与える可能性のあるインターネット上のボトルネックやリンクを可能な限り回避し、コンテンツ伝送をより速く、より安定させることです。 CDN システムは、ネットワーク全体にノード サーバーを配置して、既存のインターネットに基づいたインテリジェントな仮想ネットワークの層を形成することで、ネットワーク トラフィック、各ノードの接続と負荷の状態、およびユーザーまでの距離をリアルタイムで分析できます。ユーザーのリクエストをユーザーに最も近いサービス ノードにリダイレクトするための応答時間などの包括的な情報。その目的は、ユーザーが必要なコンテンツを近くで入手できるようにし、インターネットネットワークの混雑状況を解消し、ユーザーのウェブサイトへのアクセスの応答速度を向上させることです。

3. 設定構文

    sendfile (ファイル読み取り)
    設定構文: sendfile on|off;
  • デフォルト: なし
  • コンテキスト: http、サーバー、場所 (場所にある場合)
tcp_nopush (sendfileがオンになっている場合のネットワークパケットの送信効率を向上させます)
    • 設定構文: tcp_nopush on|off;
    • デフォルト: なし
    • コンテキスト: http、サーバー、 location
    tcp_nolay (キープアライブ接続下で、ネットワークパケットのリアルタイム送信を改善します)
    • 設定構文: tcp_nodely on|off;
    • デフォルト: None
    • Conテキスト: http、サーバー、Locationigzip (圧縮)
    設定文法: gzip オン | オフ
  • デフォルト: いいえ
    • コンテキスト: http、サーバー、ローカルの場合
    • gizp_comp_level (圧縮率)
    • 設定構文: gzip_comp_level レベル;

    デフォルト: なし;
  • コンテキスト: http、サーバー、場所
    • gzip_http_version(gzip_comp_level) p)
    • 設定構文: gzip_http_version 1.0|1.1;
    • デフォルト: なし
  • コンテキスト: http、サーバー、場所
    • gzip_static (先読みgzip関数)
    • 設定構文: gzip_static on|オフ|常に;
    • デフォルト: gzip_static off;
  • コンテキスト: http、サーバー、場所
    • 4. ブラウザキャッシュ
    • HTTP プロトコルによって定義されたキャッシュメカニズム (有効期限、キャッシュ制御など) .)

    • ブラウザキャッシュなし:

    ブラウザリクエスト→キャッシュなし→WEBサーバーリクエスト→リクエスト応答、ネゴシエート→提示

      クライアントはキャッシュあり
      • ブラウザリクエスト→キャッシュ→有効期限の検証 → 提示
      検証有効期限の仕組み
      • 検証方法

      • 対応するヘッダ情報
    有効期限が切れているかどうかを検証 Expires,年齢)Etag
    プロトコル内のEtagヘッダー情報検証
    Last-Modifiedには情報検証があります Last-Modified
    • 最初のリクエスト:

    Nginxシナリオの練習

    • 2番目のリクエスト:

    Nginxシナリオの練習

    • -Control、Expires)

      • 設定構文: [変更された] 時間の期限切れ; エポックの期限切れ |max |off;

      • デフォルト: 期限切れ;

      • コンテキスト: http、サーバー、場所 (場所にある場合)

    5、クロスサイトアクセス

    方法Nginx はクロスサイト アクセスを可能にしますか? Access-Controller-Allow-Origin
    • add_header

      • 設定構文: add_header name value [always];

      • デフォルト: なし

      • コンテキスト: http、サーバー、場所(場所にある場合)

    name は、Access-Controller-Allow-Origin および Access-Controller-Allow-Method にすることができます

    6. アンチホットリンク

    http_refer アンチホットリンク構成モジュールに基づく
    • 構成構文: valid_referers none|blocked |server_names| 文字列...;

    • デフォルト: なし

    • コンテキスト: サーバー、場所

    valid_referers none blocked IP
    if($invalid_referer) {
        return 403;
    }

    リマインダー: 構成された反リーチングをテストするには、curl を使用できます: curl -e "http:www.baidu.com" -I IP


    2プロキシとしての Nginx サービス

    • フォワードプロキシ

      • オブジェクトはクライアントです(たとえば、外部ネットワークにアクセスしたい場合は、プロキシサーバーをプロキシアドレスに設定すると、クライアントは任意のWebサイトにアクセスできます) )

    • リバースプロキシ

      • オブジェクトはサーバーです (アクセスしているサーバーを気にする必要はありません。リバースプロキシはサーバー上に配置されます。リバースプロキシはリクエストの処理に役立ちます) )

    • proxy_pass

      • 設定 構文: proxy_pass URL;

      • デフォルト: なし

      • コンテキスト: location、locationの場合はlimit_excel

    他のプロキシの構文補足:
    • proxy_buffering(buffer)

      • 構文設定: proxy_buffering on | off
      • デフォルト: なし;
      • コンテキスト: http、サーバー、場所
      • 拡張機能: proxy_buffer_size、 proxy_buffers、proxy_busy_buffers_size
      proxy_redirect(jump Redirect)
      • 設定構文: proxy_redirect デフォルト;proxy_redirect オフ;proxy_redirect リダイレクトの置換;
      • デフォルト: none
      • コンテキスト: http、サーバー、場所
      proxy_set_header (ヘッダー情報)
      • 設定構文: proxy_set_header ファイル値;
      • デフォルト: proxy_set_header ホスト $proxy_host;proxy_set_header 接続終了;
      • コンテキスト: http、サーバー、場所
      • 拡張子: proxy_hide_header 、 proxy_set_body
      proxy_connect_timeout (タイムアウト)
      • 設定構文: proxy_connect_timeout time;
      • デフォルト: なし
      • コンテキスト: http、サーバー、場所
      • 拡張子: proxy_read_timeout、proxy_send _timeout
      設定ファイル 例:
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect default;
    
    proxy_set_header HOST $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
    3. 負荷分散サービスとしての Nginx

    負荷分散
    : 既存のネットワーク構造上に構築されており、安価で効果的かつ透過的な拡張方法を提供します。ネットワーク デバイスとサーバーの帯域幅を拡張し、スループット容量を向上させ、ネットワーク データ処理機能を強化し、ネットワークの柔軟性と可用性を向上させます。 負荷分散 (英語名は Load Balance) は、作業タスクを共同で完了するために、Web サーバー、FTP サーバー、エンタープライズ キー アプリケーション サーバー、その他のミッションクリティカルなサーバーなどの複数のオペレーティング ユニットに実行を割り当てることを意味します。
    • アップストリーム语 設定文法: アップストリーム名 {...}

      • デフォルト: いいえ
      • コンテキスト: HTTP
      • 簡単な設定例

        :
      • upstream ronaldo {
                server ip:port [param];
                server ip:port [param];
                server ip:port [param];
        }
        server {
            location / {
                proxy_pass http://ronaldo;
            }
        }

        param参数解释:

        param 意义
        down 当前的server暂时不参与负载均衡
        weight=num 权重,num越大,轮询到的概率越大
        backup 预留的备份服务器
        max_fails 允许请求失败的次数
        fail_timeout 经过max_fails失败后,服务暂停的时间(默认是10s)
        max_conns 限制最大的接收的连接数

        调度算法:

        算法 意义
        轮询 按时间顺序逐一分配到不同的后端服务器
        加权轮询 weight值越大,分配到的访问几率越高
        ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP就固定访问同一个后端服务器
        least_conn 最少连接数,哪个服务器连接数少就分发
        url_hash 按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
        hash关键字值 hash自定义的key
        • ip_hash:

          • 只需要在upstream中加入 ip_hash; 即可

          • 缺陷:如果走代理,那么remote_addr就不是用户真实的ip

        • url_hash(1.7.2版本以后可用):

          • 配置语法:hash key [consistent];

          • 默认:无

          • Context:upstream

        key可以是$request_uri,根据url进行hash

        四、Nginx作为缓存服务

        1、缓存的类型

        • 服务端缓存。例:memcache、reids

        • 代理缓存。例:Nginx缓存服务端的数据

        • 客户端缓存。

        Nginxシナリオの練習

        2、常用缓存配置

        • proxy_cache_path

          • 配置语法proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size] [use_temp_path]...

          • 默认:无

          • Context:http

        • proxy_cache

          • 配置语法:proxy_cache zone | off;

          • 默认:proxy_cache off;

          • Context:http,server,location

        • proxy_cache_valid(缓存过期周期)

          • 配置语法:proxy_cache_valid [code...] time

          • 默认:无

          • Context:http、server、location

        • proxy_cache_key(缓存的维度)

          • 配置语法:proxy_cache_key string;

          • 默认:proxy_cache_key $scheme$proxy_host$request_uri;

          • Context:http、server、location

        常见配置:

        proxy_cache_path cache_path levels=1:2 keys_zone=key_name:10m max_size=10g inactive=60m use_temp_path=off;
        
        server {
            loaction / {
                proxy_pass http://ronaldo;
                proxy_cache key_name;
                proxy_cache_valid 200 304 12h;
                proxy_cache_valid any 10m;
                proxy_cache_key $host$uri$is_args$args;
                add_header Nginx-Cache "$upstream_cache_status";
        
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            }
        }

        2、清除指定缓存

        • rm -rf 缓存目录内容

        • 第三方扩展模块:ngx_cache_purge

        3、如何让部分页面不缓存

        • proxy_no_cache

          • 配置语法:proxy_no_cache string ...;

          • 默认:无

          • Context:http,server,location

        简单示例

        if ($request_uri ~ ^/(url_3|login|register|password\/reset)) {
            set $cookie_nocache 1;
        }
        
        location / {
            proxy_no_cache $cookie_nocache;
        }

        4、大文件分片请求

        • slice

          • 语法配置:slice size;

          • 默认:slice 0;

          • Context:http、server,location

        优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他请求不受影响。
        缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽等待情况。

        相关推荐:

        关于Nginx的基础内容

        Nginx编译安装Lua模块

    以上がNginxシナリオの練習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。