Nginx リバース プロキシを使用してクロスドメイン問題を解決する方法の詳細な説明

Nginx リバース プロキシを使用してクロスドメイン問題を解決する方法の詳細な説明

質問

前回のクロスドメイン リソース共有に関する記事では、ドメイン間で Cookie を送信する場合、Access-Control-Allow-Origin を * に設定することはできず、要求された Web ページと一致する明確なドメイン名を指定する必要があることを説明しました。このような問題は、このプロジェクトの開発中に他の人と共同作業しているときに発生しました。

解決

  1. 一般的には、バックエンドとの CORS クロスドメインリソース共有を使用して、アクセスするドメイン名に Access-Control-Allow-Origin を設定することができます。これにはバックエンドの協力が必要であり、一部のブラウザではサポートされていません。
  2. パートナーのバックエンドとの連携に基づいて、nginxプロキシを使用してブラウザの相同性ポリシーを満たし、クロスドメインを実現します。

実装

リバースプロキシの概念

リバースプロキシ方式とは、インターネット上の接続要求をプロキシサーバーで受け付け、内部ネットワーク上のサーバーに転送し、サーバーから取得した結果をインターネット上の接続要求元のクライアントに返す方式です。このとき、プロキシサーバーは外部からはサーバーのように見えます。リバース プロキシ サーバーはクライアントには元のサーバーと同じように見えるため、クライアントは特別な構成を実行する必要はありません。クライアントはリバース プロキシの名前空間内のコンテンツに通常の要求を送信し、リバース プロキシは要求を転送する場所 (元のサーバー) を決定し、コンテンツが元々クライアントに属していたかのように、取得したコンテンツをクライアントに返します。

nginxリバースプロキシを使用してクロスドメインを実装する手順

nginxの公式サイトにアクセスしてパッケージをダウンロードし、nginx環境を構築します。

nginx設定ファイルを変更し、ngixn.confファイルを見つけて関連する設定を変更します。

http {
 mime.types を含めます。
 デフォルトタイプ アプリケーション/オクテットストリーム;

 ファイル送信オン;

 サーバー{
  listen 8000; #ポート8000​​をリッスンします。他のポートに変更することもできます server_name localhost; #現在のサービスの場所のドメイン名 /wili/api/ {
    proxy_pass http://chick.platform.deva.wili.us/api/; #アクセスパスが /will/api として記録されたプロキシ構成を追加します proxy_http_version 1.1;
  }
  
  位置 / {
    proxy_pass http://localhost:8001;
    プロキシ_http_バージョン 1.1;
  }
  
  エラーページ 500 502 503 504 /50x.html;
  場所 = /50x.html {
   ルートhtml;
  }

 }

}

構成の説明:

  • 設定情報から、nginx が localhost のポート 8000 を listen し、Web サイト A と Web サイト B へのアクセスが localhost のポート 8000 を介して行われることがわかります。
  • 「will/api」で始まるすべてのアドレスが処理のために「http://chick.platform.deva.wili.us/api/」に転送されるように、「/will/api」のアクセスを特別に構成しました。
  • アクセスアドレスの変更

nginx を設定したので、すべてのアクセスは元の Web サイト アドレス (Web サイト A は localhost:8001、Web サイト B は http://chick.platform.deva.wili.us/api/) ではなく nginx を経由する必要があります。したがって、Web サイト A のリクエスト インターフェイスを http://localhost:8000/wili/api/ に変更する必要があります。次に、nginxを起動し、設定された8000にアクセスします。


注意すべき点は、nginx を起動するとポートの競合が発生し、起動に失敗する可能性があることです。タスク マネージャーで起動が成功したかどうかを確認できます。

要約する

クロスドメイン ブラウザの問題を解決する方法は多数あります。

  1. jsonpでは、ターゲットサーバーがコールバック関数と連携する必要がある。
  2. CORSでは、サーバーがヘッダーを設定する必要があります: Access-Control-Allow-Origin
  3. nginx リバースプロキシ方式はあまり言及されませんが、対象サーバーの協力を必要としません。ただし、リクエストを転送するためのトランジット nginx サーバーを構築する必要があります。 (リバースプロキシを使用すると、Web ページへのアクセスが以前よりも遅くなる可能性があります)

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginxサーバーにおけるマップモジュールの設定と使用方法の詳細な説明
  • Nginxのmapコマンドを使用してページをリダイレクトする
  • nginx を使用して Cookie のクロスドメイン アクセスを解決する方法
  • Nginxはアドレス転送時のクロスドメイン問題を解決します
  • Vue パッケージングは​​ Nginx プロキシを使用してクロスドメインの問題を解決します
  • nginx を使用してクロスドメイン問題を解決する方法 (Flask を例に)
  • Nginx で複数のドメイン名がドメインをまたいでアクセスできるようにマップを使用する方法

<<:  WeChatミニプログラムページ間の価値転送を実装する方法の例

>>:  MySQLをインストールして設定し、ルートパスワードを変更する方法

推薦する

impress.js プレゼンテーション層フレームワーク (デモツール) - 初めての体験

半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...

Nodejs-cluster モジュールの知識ポイントの概要と使用例

面接官から「NodeJS で複数のプロセスを開始する方法を教えてください」と尋ねられることがあります...

Vueの学習手順

目次1. v-text (v-instruction name = "variable&q...

CentOS 8 仮想マシンから Windows 10 ホスト フォルダーにアクセスする方法の簡単な分析

VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...

HTML レイヤード ボックス シャドウ効果のサンプル コード

まず、画像を見てみましょう。今日はこのエフェクトを作成します。 実は、何でもないんです。Web ペー...

デザイン理論:テキスト表現とユーザビリティ

<br />テキストデザインでは、通常、テキストのレイアウト、つまりテキストをより美しく...

シンプルなCSSアニメーションのtransition属性の詳しい説明

1. 遷移属性の理解1. transition 属性は、次の 4 つの遷移プロパティを設定するために...

TypeScript ジェネリックパラメータのデフォルト型と新しい厳密なコンパイルオプション

目次概要コンポーネントクラスの型定義を作成するジェネリック型を使用してPropsとStateを定義す...

MySQLトランザクションとSpring分離レベルの実装原理の詳細な説明

1. トランザクションはACID特性を持つ原子性: トランザクションは、トランザクションによって分割...

Nginx フォワードプロキシとリバースプロキシの違いと原理分析

1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...

Tomcat でサーブレット URL パターンを構成する際の問題の詳細な説明

tomcat の web.xml を構成する場合、サーブレットは比較的重要な問題です。ここでは、サー...

HTML テーブルタグチュートリアル (23): 行の境界線の色属性 BORDERCOLORDARK

行ごとに、暗い境界線の色を個別に定義できます。基本的な構文<TR 境界線の色を暗くする=col...

MySQL Routerのインストールと展開

目次01 MySQLルーターの紹介MySQL Router とは何ですか? 02 MySQLルータの...

CSS3は円錐グラデーション効果を実現します

文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...

JavaScript Three.js でテキストを作成する最初の経験

目次効果テキストの作成を開始するまずフォントローダーを作成するフォントライブラリを読み込むテキストジ...