Nginx リバースプロキシのデバイス識別に基づく ACL 設定

王林
リリース: 2023-06-10 12:09:11
オリジナル
1356 人が閲覧しました

Nginx は高性能 Web サーバーであり、リバース プロキシや負荷分散によく使用されます。リバース プロキシ シナリオでは、Nginx を使用すると、複数のサーバーからのリクエストを均一に転送できるため、Web サイトのアクセス速度と安定性が向上します。ただし、一部の特殊なシナリオでは、ユーザーのデバイスに応じてリクエストを異なる方法で転送または処理する必要がある場合があります。たとえば、モバイル デバイスのリクエストの場合、より良いページ アクセス エクスペリエンスを実現するために、特別に最適化されたモバイル サーバーにリクエストを転送する必要がある場合があります。このとき、デバイス識別に基づく ACL 設定は非常に役立ちます。ここでは、Nginx でデバイス対応 ACL を使用するのに役立ついくつかの基本的な手順とサンプル コードを示します。

ステップ 1: デバイス識別プラグインをインストールする

Nginx はデフォルトではデバイス識別をサポートしていないため、最初に関連するプラグインをインストールする必要があります。現在、より一般的に使用されているプラ​​グインは ngx_http_browser_module と ngx_http_user_agent_module で、どちらも共通のユーザー エージェント情報を識別し、使用する対応する変数を提供します。以下のサンプルコードは ngx_http_user_agent_module に基づいて実装されています。

まず、Nginx をコンパイルするときにこのモジュールを追加する必要があります。これは、configure コマンドに --with-http_user_agent_module オプションを追加することで実現できます:

./configure --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with - pcre --with-http_realip_module --with-http_geoip_module --with-http_user_agent_module

ステップ 2: デバイス識別判定の設定

Nginx では、デバイス識別判定は if ステートメントと達成する $ua 変数。具体的には、if ステートメントを使用して $ua 変数の値に基づいてデバイス タイプを決定し、対応する分岐でさまざまな操作を実行できます。簡単な例を次に示します。

map $http_user_agent $is_mobile {

default        0;
~*mobile|android|ipod|iphone|blackberry|phone|playbook|tablet|kindle|silk     1;
ログイン後にコピー

}

server {

listen 80;
server_name example.com;

if ($is_mobile) {
    # 处理移动设备的请求
    proxy_pass http://mobile.example.com;
} else {
    # 处理桌面设备的请求
    proxy_pass http://www.example.com;
}
ログイン後にコピー

}

at In上の例では、まず $is_mobile 変数を定義します。この変数の値は、$http_user_agent 変数の値に基づいて変化します。具体的には、$http_user_agent の値に mobile、android、ipod、iphone、blackberry、phone、Playbook、tablet、kindle、silk などのキーワードが含まれる場合、$is_mobile の値は 1 になり、それ以外の場合は 0 になります。次に、Nginx 構成ファイルの if ステートメントを使用して、$is_mobile 変数の値に基づいてデバイス タイプを決定し、リクエストを別のサーバーに転送します。

if 文自体が Nginx のパフォーマンスに影響を与えるため、不要な場所での if 文の使用はできるだけ避ける必要があることに注意してください。さらに、ngx_http_map_module モジュールを使用してデバイス タイプと転送アドレスのマッピングを実装し、構成をさらに簡素化することもできます。

ステップ 3: 構成のテストと最適化

デバイス認識のための ACL 構成は一般に複雑で、さまざまなデバイス タイプとブラウザのバージョンを考慮する必要があります。構成の正確性と信頼性を確保するには、十分なテストと最適化を行う必要があります。以下にいくつかの提案を示します。

  1. アクセス ログとトラフィック監視を通じてユーザー アクセスを理解し、データ分析に基づいてデバイス識別のヒット率を最適化します。
  2. デバイスの種類とブラウザのバージョンが異なると、特にモバイル デバイスのブラウザでは、異なる処理と最適化が必要になります。たとえば、モバイル デバイスからのリクエストに gzip 対応ページを使用すると、帯域幅が節約され、ページの読み込み速度が向上します。
  3. if ステートメントは Nginx のパフォーマンスに影響を与えるため、計算と判断の繰り返しを避けるために、いくつかの一般的なユーザー エージェント情報を前処理し、それを変数にキャッシュすることを検討できます。これは、ngx_http_map_module モジュールと ngx_http_upstream_hash_module モジュールを通じて実現できます。

概要

デバイス識別に基づいた ACL 構成を使用すると、Nginx でモバイル デバイスやデスクトップ デバイスからのリクエストをより適切に処理できるようになり、ユーザー エクスペリエンスと Web サイトのパフォーマンスが向上します。デバイスの種類とブラウザのバージョンは多様で複雑であるため、構成の正確さと信頼性を確保するために十分なテストと最適化を実施する必要があることに注意してください。また、Nginx のパフォーマンスと安定性を向上させるために、不要な場所での if ステートメントの使用はできるだけ避ける必要があります。

以上がNginx リバースプロキシのデバイス識別に基づく ACL 設定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート