Vue プロジェクトを使用して複数のプロキシを構成する際の注意事項

Vue プロジェクトを使用して複数のプロキシを構成する際の注意事項

Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config.js で devServer を設定してローカルでサーバーを起動します。このオプションでは、プロキシ プロパティを設定して、ローカル (例: /api/action) に向けられたリクエストをバックエンド開発サーバー (例: http://xxx.xxx.xxx/api/action) にプロキシします。

開発サーバー: {
        ポート: 8081、
        プロキシ: {
            '/api/アクション': {
                ターゲット: 'http://192.168.200.106:81',
                変更元: true、
                ws: 真、
                安全: 偽
            }
        }
    },
​```

この構成では、次の 2 つの点に注意してください。

重複するインターフェース アドレスがある場合、一致度が最も低いものが最後に配置されます。

例えば:

  1. * / を 192.191.1.1 に一致させます。
  2. * /api を 192.191.1.2 に一致させる
  3. * /api/action を 192.191.1.3 に一致させる

次のように書くと:

プロキシ: {
            '/': {
                ターゲット: 'http://192.191.1.1',
                変更元: true、
                ws: 真、
                安全: 偽
            },
    '/api': {
                ターゲット: 'http://192.191.1.2',
                変更元: true、
                ws: 真、
                安全: 偽
            },
    '/api/アクション': {
                ターゲット: 'http://192.191.1.3',
                変更元: true、
                ws: 真、
                安全: 偽
            }
        }

すると、/、/api、/api/actionへのすべてのリクエストは192.191.1.1にプロキシされます。

その理由は、ここでのマッチングは実際には通常のマッチング プロセスであるためです。/api を要求すると、まず最初の構成項目を読み取り、構成内の / を使用して要求内の /api とマッチングします。要求された /api には構成項目 / が含まれていることがわかり、マッチングは成功します。要求は 192.191.1.1 に直接プロキシされます。/api/action のマッチングについても同様です。

つまり、その一致ルールは、構成項目のアドレスを使用して、リクエストのアドレスと一致させることです。リクエストのアドレスに構成のアドレスが含まれている場合、一致は成功します。それ以外の場合は、次の構成項目を選択して一致を続行します。

したがって、要求アドレスと一致する構成アドレスの文字数が少ないほど、一致度は低くなります。 上記の例では、設定内のアドレス (/) の 1 文字のみがリクエスト アドレス (/api) と一致するため、一致度は低くなります。

したがって、正しい書き方は次のようになります。

プロキシ: {
            '/api/アクション': {
                ターゲット: 'http://192.191.1.3',
                変更元: true、
                ws: 真、
                安全: 偽
            },
    '/api': {
                ターゲット: 'http://192.191.1.2',
                変更元: true、
                ws: 真、
                安全: 偽
            },
    '/': {
                ターゲット: 'http://192.191.1.1',
                変更元: true、
                ws: 真、
                安全: 偽
            }
        }

このようにして、3つのアドレスへのリクエストは、対応するアドレスに正しくプロキシされる。

複数のアドレスが同じターゲットをプロキシする場合、それらをマージすることができます

実際のアプリケーションでは、バックエンドはマイクロサービス モードで開発されるため、開発フェーズでは、異なるサービスを異なるアドレスにプロキシする場合があります。サービスの数が多い場合、プロキシの数も大きくなります。

プロキシ: {
  		'/api/アクション': {
                ターゲット: 'http://192.191.1.3',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action2': {
                ターゲット: 'http://192.191.1.4',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action3': {
                ターゲット: 'http://192.191.1.3',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action4': {
                ターゲット: 'http://192.191.1.4',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action5': {
                ターゲット: 'http://192.191.1.5',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action6': {
                ターゲット: 'http://192.191.1.6',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action7': {
                ターゲット: 'http://192.191.1.5',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action8': {
                ターゲット: 'http://192.191.1.6',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action9': {
                ターゲット: 'http://192.191.1.7',
                変更元: true、
                ws: 真、
                安全: 偽
            },
			 '/api': {
                ターゲット: 'http://192.191.1.2',
                変更元: true、
                ws: 真、
                安全: 偽
            },
			 '/': {
                ターゲット: 'http://192.191.1.1',
                変更元: true、
                ws: 真、
                安全: 偽
            },              
        }

構成されたプロキシの数が 10 を超えると、開発環境でコンパイルおよびパッケージ化するときに次のエラーが報告されます。

ここに画像の説明を挿入

エラーを解決し、コード サイズを削減するために、同じターゲットを持つ構成項目をマージすることができます。上記からわかるように、これは実際には通常のマッチング プロセスなので、通常の構文を使用してマージできます。

プロキシ: {
  		'/api/アクション|/api/アクション3': {
                ターゲット: 'http://192.191.1.3',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action2|/api/action4'': {
                ターゲット: 'http://192.191.1.4',
                変更元: true、
                ws: 真、
                安全: 偽
            },
             
              '/api/アクション5|/api/アクション7': {
                ターゲット: 'http://192.191.1.5',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/アクション6|/api/アクション8': {
                ターゲット: 'http://192.191.1.6',
                変更元: true、
                ws: 真、
                安全: 偽
            },
              '/api/action9': {
                ターゲット: 'http://192.191.1.7',
                変更元: true、
                ws: 真、
                安全: 偽
            },
			 '/api': {
                ターゲット: 'http://192.191.1.2',
                変更元: true、
                ws: 真、
                安全: 偽
            },
			 '/': {
                ターゲット: 'http://192.191.1.1',
                変更元: true、
                ws: 真、
                安全: 偽
            },              
        }

もちろん、正式に導入された場合でも、バックエンドは統合エージェントとして機能する必要があります。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue で異なるプロキシを構成して、異なるバックグラウンド操作に同時にアクセスします。
  • Vueプロジェクト構成のクロスドメインアクセスとプロキシ設定方法
  • Vue 構成マルチプロキシ サービス インターフェース アドレス操作
  • webpack+vue-cil での ProxyTable 設定インターフェース アドレス プロキシ操作
  • VueCli4 プロジェクトでリバース プロキシを設定する方法
  • Vue (2.x, 3.0) はクロスドメインプロキシを設定します
  • Vue cli3 はプロキシプロキシの無効なソリューションを設定します
  • Vue 構成ファイルでプロキシ v2 バージョンを実装する方法

<<:  MYSQLでプロシージャの名前を変更する方法の詳細な説明

>>:  MySQL バッチ挿入ループの詳細なサンプルコード

推薦する

HTMLからReactを実装する方法を教えます

ReactとはReact は、効率的で高速なユーザー インターフェイスを構築するためのシンプルな J...

Vue組み込みコンポーネントのキープアライブの使用例

目次1. キープアライブの使用使用例: 1. すべてのページをキャッシュする: 2. 条件に基づいて...

SpringBoot + Vue プロジェクトを Linux サーバーにデプロイするための詳細なチュートリアル

序文SpringBoot + Vueのフロントエンドとバックエンドを分離したプロジェクトをどのように...

MySQL にテキストと画像を保存する方法

Oracle の大きなテキスト データ型 Clob 長いテキスト型 (MySQL ではサポートされて...

CSS 等高レイアウトの一般的な方法

等高レイアウト同じ親コンテナー内の同じ高さの子要素のレイアウトを指します。等高レイアウトの実装の観点...

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズするVue カスタム ディレクティブの構文は次のとおりです。 Vue.di...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

HTMLはマーキーを使用してテキストを左右にスクロールします

コードをコピーコードは次のとおりです。 <本文> //マーキーの助けを借りて<MA...

Centos7.3 Nginx をインストールして展開し、https を設定する方法

設置環境1. gccのインストールnginxをインストールするには、まず公式サイトからダウンロードし...

Zabbix Agent2を使用してOracleデータベースを監視する方法

概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

MySQL における楽観的ロックと悲観的ロックの例

データベース管理システムにおける同時実行制御のタスクは、データベース内の同じデータに同時にアクセスす...

Alibaba Cloud ECS サーバーの開始プロセス (初心者必読のチュートリアル)

1. Alibaba Cloudは、個人のニーズに応じて適切なクラウドサーバーを選択し、CPU、メ...

CentOS での Django プロジェクトのデプロイに関する詳細なチュートリアル

基本環境パゴダ設置サービスパゴダにインストールされた[Pythonプロジェクトマネージャー]パゴダに...

JavaScript での HTML キャンバスとページ ストレージ テクノロジの使用に関する詳細な説明

目次1. JavaScriptはHTMLでキャンバスを使用する2. ページストレージ技術1. Jav...