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

推薦する

Linux ドメイン ネーム サービス DNS 設定方法

DNSとはDNS の正式名称は Domain Name System で、ドメイン名解決システムを意...

このポイントのJavaScriptの基本

目次これ方法オブジェクト内これを隠した厳密モード要約するJavaScript の this も不思議...

Vueスロットの実装原理についての簡単な説明

目次1. サンプルコード2. 現象を通して本質を見抜く3. 実施原則4. 親コンポーネントのコンパイ...

Vueは、商品の数を制御するためのコンポーネントのパッケージ化と使用を実装します。

Vueのコントロール商品数量コンポーネントのカプセル化と使用は参考までに。具体的な内容は以下のとお...

Centos7 DockerでNginxファイルを変更するプロセスの詳細な説明

1. docker に nginx をインストールします。 docker に Nginx をインスト...

URLエスケープエンコーディングの特殊文字に基づいて

目次URL 内の特殊文字URL 特殊文字エスケープ、URL 内の一部の文字には特別な意味があり、基本...

MySQLにおける静的変数の役割の詳細な説明

MySQLにおける静的変数の役割の詳細な説明静的変数の使用 静的変数サンプルコード: 関数テスト()...

Vueは複数の画像の追加、表示、削除を実装します

この記事では、Vueで複数の画像を追加、表示、削除するための具体的なコードを参考までに紹介します。具...

MySQLデータベース移行により、大量のデータを迅速にエクスポートおよびインポートできます

データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実...

Tomcatc3p0 で jnid データ ソースを構成する 2 つの実装方法の分析

c3p0の使用c3p0jarパッケージをインポートする <!-- https://mvnrep...

Angular CDK を使用してサービスポップアップトーストコンポーネント機能を実装する

目次1. 環境設備2. ToastコンポーネントとToastServiceを作成する2.1 Toas...

SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります...

Vue プロジェクトで addRoutes を使用する際の問題の解決策

目次序文1. 404 ページ1. 原因2. 解決策2.白い画面を更新する1. 原因2. 解決策3. ...

WebpackはCSSファイルを読み込み、その設定方法

webpackはCSSファイルとその設定をロードします複数の CSS ファイルを作成した後、HTML...

MySQLのマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...