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 バッチ挿入とユニークインデックスの問題に対する解決策

推薦する

vue3.2 で追加された defineCustomElement の基本原理の詳細な説明

目次Webコンポーネントカスタム要素概要HTMLTemplateElement コンテンツ テンプレ...

Vue3 Vue イベント処理ガイド

目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...

VirtualBox を使用して Mac 上にローカル仮想マシン環境を構築する方法

1. ビッグデータとHadoopビッグデータについて研究し学ぶには、当然 Hadoop から始める必...

Linux での MySQL のインストールに関する詳細なチュートリアル

1. MySQLサービスをシャットダウンする# service mysqld stop 2. rpm...

HTML初心者や初級者向けの提案。専門家は無視してかまいません。

感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...

MySQLはテーブル内のフィールドを別のテーブル内のフィールドの値と等しくなるように更新します

以下のように表示されます。 table1 を z として更新し、table2 を zb として結合し...

Linux lnコマンドの使用

1. コマンドの紹介ln コマンドは、ファイルのリンクを作成するために使用されます。リンクは、ハード...

MySQL ビッグデータ クエリ最適化エクスペリエンスの共有 (推奨)

本格的な MySQL 最適化! MySQL のデータ量が少ない場合は最適化は不要です。データ量が多い...

ファイルアップロードスタイルの詳細を実装するjs

目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

Windows 上で Zookeeper サーバーを構築するチュートリアル

インストールと設定Apacheの公式ウェブサイトには多くのミラーダウンロードアドレスが用意されており...

ノードスクリプトで自動サインインと抽選機能を実現

目次1. はじめに2. 準備3. スクリプトプロジェクトの構築4. コードの作成と実行5. まとめと...

HTML Web ページ リスト タグ学習チュートリアル

HTML Web ページ リスト タグの学習チュートリアル。 HTML ページでは、リストはアウトラ...

Nginx のアクセス制御とパラメータ調整方法

Nginx グローバル変数Nginx には、$variable 名を通じて使用できるグローバル変数が...

MySQL 8.0.15 のインストールと設定方法のグラフィックチュートリアル (Win10 Home バージョン 64)

超初心者の私は、MySQL を学び始めたばかりで、インストール プロセス中に多くの問題に遭遇しました...