Nginx リバースプロキシの HTTP 動詞とパスベースの ACL 設定

PHPz
リリース: 2023-06-10 09:22:39
オリジナル
817 人が閲覧しました

Nginx は、高性能 Web サーバーおよびリバース プロキシ サーバーであり、その強力な構成機能により、Nginx をさまざまなシナリオで使用できます。その中でもHTTP動詞とパスに基づくACL設定はNginxリバースプロキシでよく使われる手法であり、本記事ではその原理と実装方法を紹介します。

1. ACL の概念

ACL (Access Control List) は、ルールベースのアクセス制御技術であるアクセス制御リストです。いくつかのルールを定義することで、さまざまな訪問者を区別し、さまざまなアクセス制御を行うことができます。

Nginx リバース プロキシでは、ACL を使用してさまざまなリクエストを区別し、さまざまなリバース プロキシ戦略を実装できます。具体的には、HTTP リクエストの動詞とパスを照合することでリクエストを分類し、異なるバックエンド サーバーに転送できます。

2. HTTP 動詞とパスのマッチング

HTTP プロトコルは、GET、POST、PUT、DELETE などの一般的に使用される HTTP 動詞を定義します。 HTTP 動詞を使用してクライアントのリクエスト タイプを示すことができます。これは、Nginx 設定の $request_method 変数を通じて取得できます。

HTTP 動詞に加えて、パスもリクエスト タイプを決定する重要な要素です。このパスを使用して、要求されたリソースの場所を表すことができます。この場所は、Nginx 構成の $request_uri 変数を通じて取得できます。

3. ACL ベースの設定方法

Nginx では、if ステートメントを使用して ACL ルールを構築できます。 if ステートメントの構文は次のとおりです。

if (条件) {

// do something
ログイン後にコピー

}

ここで、条件は、現在のリクエストが条件に準拠しているかどうかを判断するために使用される式です。ルール。ルールが満たされる場合、中括弧で囲まれたコード ブロック内のアクションが実行されます。

HTTP 動詞とパスに基づく ACL 設定では、if ステートメントのネストによってルールの一致を実現できます。具体的には、まず HTTP 動詞を判断し、次にパスを判断します。サンプル コードは次のとおりです。

if ($request_method = 'GET') {

if ($request_uri = '/users') {
    proxy_pass http://backend1;
}
if ($request_uri = '/orders') {
    proxy_pass http://backend2;
}
ログイン後にコピー

}
if ($request_method = 'POST') {

if ($request_uri = '/users') {
    proxy_pass http://backend3;
}
if ($request_uri = '/orders') {
    proxy_pass http://backend4;
}
ログイン後にコピー

}

上記のサンプル コードでは、まず HTTP 動詞が GET か POST かを判断し、次にパスを決定し、最後に一致結果に基づいて転送する別のバックエンド サーバーを選択します。

4. ACL ルールの最適化

if ステートメントを使用して HTTP 動詞とパスに基づいた ACL 設定を実装できますが、if ステートメントにはいくつかの欠点もあります。具体的には、if文内のマッチングルールを順番にマッチングしていきますが、ルールの数が多いとマッチング効率が非常に悪くなります。

この問題を解決するには、Nginx のマップ命令を使用して最適化を行うことができます。マップ命令は、異なる変数を異なる値にマップできるため、if ステートメントの入れ子関係が簡素化され、マッチング効率が向上します。

次に、map ディレクティブに基づく ACL 設定のコード例を示します。

map $request_method$request_uri $backend {

default                     http://backend0;
GET/users                   http://backend1;
GET/orders                  http://backend2;
POST/users                  http://backend3;
POST/orders                 http://backend4;
ログイン後にコピー

}
server {

...
location / {
    proxy_pass              $backend;
}
...
ログイン後にコピー

}

上記のコード例では、map ディレクティブは $request_method 変数と $request_uri 変数の組み合わせをさまざまな $backend 変数値にマップします。次の proxy_pass ディレクティブでは、$backend 変数を直接使用してリクエストを転送します。

5. 概要

HTTP 動詞とパスに基づく ACL 設定は、Nginx リバース プロキシで一般的に使用されるテクノロジであり、さまざまなリクエストを分類し、さまざまなバックエンド サーバーに転送するために使用できます。特定の実装プロセスでは、ルールに一致させるために if ステートメントまたはマップ命令を使用できます。特に、より複雑な ACL ルールの場合、map コマンドを使用すると照合効率が向上し、それによってシステムのパフォーマンスが向上します。

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

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