URLに基​​づいてリクエストを転送するnginxの実装の実践経験

URLに基​​づいてリクエストを転送するnginxの実装の実践経験

序文

これは fastdfs を使用してイントラネット外部に展開された分散ファイルシステムであるためです。アプリケーションはポート 8088 に展開され、そのバックエンド管理システムはポート 8089 (同じイントラネット サーバー上) に展開されます。バックエンド管理システムのサービスは fastdfs サービスを要求する必要がありますが、これは直接要求できます (同じサーバーのリソース)。ただし、バックエンド管理システム (Springboot プロジェクト) のみを外部化しており、パブリック ネットワークによって割り当てられた IP を使用せずにバックエンド管理システムにのみアクセスできます。fastdfs サービスのインターフェイスに直接アクセスするには、サーバーのパブリック ネットワークに接続する必要がありますが、これによりユーザーのアクセスが制限されます (サーバーにアクセスするために毎回サーバーに行くことはできませんが、他の場所からアクセスできると思います)

プロキシサーバー: SockerServerはポートをリッスンし、httpメッセージに従って指定されたサーバーポートに接続し、データ要求を行います。
- HTTPプロキシ
http リクエストはプロキシ サーバーを通過し、プロキシ サーバーは対応する http 応答本体を転送する役割のみを果たします。
- HTTPSプロキシ
https リクエストがプロキシ サーバーを通過すると、プロキシ サーバーとのトンネルを確立するために CONNECT メッセージが送信されます。プロキシ サーバーが HTTP 200 を返すと、トンネルは正常に確立されます。後続のプロキシ サーバーは、データの転送のみを担当する必要があります。実際には、クライアントと実際のサーバーの間で SSL/TLS ハンドシェイクがまだ発生します。

プロキシサーブレット

バックエンドプロジェクトのポート8089はサーバーのfastdfsサービスにアクセスできるため、最初に考えたのは、SpringbootのProxyServletを使用して、指定されたリクエストをサーバーのポート8088にプロキシすることです。

Spring Boot のメイン サーブレットは SpringMVC の DispatcherServlet で、そのデフォルトの URL パターンは "/" です。特定の URL に異なる呼び出し (他のサーバー インターフェース) を追加する場合は、新しいプロキシ サーブレットを作成する必要があります。このサーブレットは ServletRegistrationBean を使用し、異なるポートのリスニングとデータ送信を処理する新しい ProxyServlet を作成し、それを springboot によって管理される servletContext に登録します (指定されたサーバーとポートを設定し、転送用のインターフェースを要求します)。

頼る

<依存関係>
 <groupId>org.mitre.dsmiley.httpproxy</groupId>
 <artifactId>スマイリー http プロキシ サーブレット</artifactId>
 <バージョン>1.7</バージョン>
 </依存関係>

構成

### プロキシを設定する# リソースを要求すると、プロキシはプロジェクト内のポート 8088 に転送します。proxy.test.servlet_url_one= /resource/*
proxy.test.target_url_one= https://localhost:8088
@成分
@データ
パブリッククラスProxyFilterServlet {
 @Value("${proxy.test.target_url_one}")
 プライベート文字列 targetUrl;
 @Value("${proxy.test.servlet_url_one}")
 プライベート文字列 servletUrl;
}

設定を変更して追加する

@構成
パブリッククラスProxyServletConfig {
 オートワイヤード
 プライベート ProxyFilterServlet proxyFilterServlet;
 //複数のプロキシサーブレットは複数のBeanを構成できます
 @ビーン
 パブリック ServletRegistrationBean servletRegistrationBean(){
 ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), proxyFilterServlet.getServletUrl());
 //この setName を設定する必要があり、複数ある場合は名前が異なる必要があります servletRegistrationBean.setName("go_backend");
 servletRegistrationBean.addInitParameter("targetUri", proxyFilterServlet.getTargetUrl());
 servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
 servletRegistrationBean を返します。
 }
}

サーブレット コンテナを介してターゲット サーバーとの接続を確立します。結局のところ、nginx のようなプロフェッショナル プロキシ サーバーほど強力ではありません。

nginx - プロキシ転送

  • このとき、サーバー間に nginx のレイヤーを追加して、異なるサービス リクエストを異なるポート API に転送して処理することを考えました。

外部ネットワーク要求を同じサーバーのイントラネットポートに転送する

サーバー{
 聞く 80;
 サーバー名 127.0.0.1;
 
 位置 / {
 プロキシパス http://127.0.0.1:3000;
 }
 
 場所 ~ /api/ {
 プロキシパス http://172.30.1.123:8081;
 }
}

参考ブログ投稿:

https://www.jb51.net/article/174382.htm

https://www.jb51.net/article/174383.htm

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • nginx を使用して正規表現で指定された URL リクエストを傍受する方法
  • nginx を使用して特定のインターフェース (URL) をブロックする方法
  • NginxはURLのパスに応じてアップストリームに動的に転送します
  • nginx proxy_pass リバース プロキシ設定で URL の後に / を追加する場合と追加しない場合の違いの紹介
  • Nginx で中国語の URL が使用できない問題の解決策
  • nginx 設定 URL リダイレクト - リバース プロキシの詳細な説明
  • URLパラメータに応じたnginxの書き換えと場所の詳細な説明
  • Nginx サーバーで URL リンクを設定する方法

<<:  mysql はインデックスを無効にしますか?

>>:  MySQL バッチ挿入とユニークインデックスの問題に対する解決策

推薦する

JS の 3 つの主要な問題、非同期性とシングルスレッドについて簡単に説明します。

目次シングルスレッド非同期シングルスレッドしかし、開発中にネットワーク リクエストやスケジュールされ...

js SMS認証コード入力ボックスを手動で実装する

序文この記事では、私が手動で実装したフロントエンドの一般的な SMS 認証コード入力コンポーネントと...

Vue.js での $emit の使用に関する詳細な説明

1. 親コンポーネントは props を使用して子コンポーネントにデータを渡すことができます。 2....

MySQL のインデックスとデータ テーブルを管理する方法

目次テーブルの競合を見つけて修正するインデックス統計の更新テーブルの競合を見つけて修正するデータ テ...

MySQL データ型の詳細

目次1. 数値型1.1 数値型の分類1.1.1 浮動小数点数1.1.2 ビットタイプ1.1.3 時間...

サブセットかどうかを判断するためのMySQLメソッドの手順

目次1. 問題2. 解決策オプション1:オプション2: 1. 問題この話は、エラーと脱落率を照会する...

MySQLの実行プロセスとシーケンスについての簡単な説明

目次1:mysql実行プロセス1.1: コネクタ1.2: キャッシュ1.3: アナライザー1.4: ...

誰もが知っておくべきウェブサイトのユーザビリティに関する 10 のヒント

これ以上時間を無駄にせず、早速本題に入りましょう。 1. ロゴに代替テキストを追加するこれには 2 ...

アクティビティページでの CSS3 アニメーション効果の適用

背景あっという間に忙しい一年が終わり、毎年恒例のイベントの時期がやってきます。お祭り気分を演出するに...

VMware に Centos7 をインストールした後に外部ネットワークに ping できない問題を解決する

クラスターを構成する際に問題が発生しました。当初は 3 台の仮想マシンすべてが外部ネットワークに p...

HTML タグ dl dt dd 使用方法

基本構造:コードをコピーコードは次のとおりです。 <ダウンロード> <dt>...

js の関数の長さはどれくらいですか?

目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...

Kubernetesでポッドを作成する方法

目次ポッドを作成するには? kubectl ツールポッドを作成するには?前回の記事では、コンテナとポ...

Vue3とVue2の利点のまとめ

目次1. なぜ vue3 が必要なのでしょうか? 2. vue3の利点3. 応答原則の違い4. ライ...

HTML+CSS+jQuery はスクリーンショットで検索ホットリストタブ効果を模倣します

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...