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

推薦する

Angularフレームワークのビュー抽象定義の詳細な説明

序文「大規模なフロントエンド プロジェクト向け」に設計されたフロントエンド フレームワークである A...

CSS3 で虫眼鏡効果を模倣するいくつかの方法の原理の分析

記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...

MySQL インデックス最適化の説明

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

仮想マシンに Windows Server 2008 オペレーティング システムをインストールする

この記事では、Windows Server オペレーティング システムのインストールと企業でのそのア...

タイプライター効果を実現する純粋な js

この記事の例では、タイプライター効果を実現するためのjsの具体的なコードを参考までに共有しています。...

CN2、GIA、CIA、BGP、IPLC はどういう意味ですか?

CN2ラインとは何ですか? CN2 は、China Telecom Next Carrier Ne...

HTML タグ マーキーはさまざまなスクロール効果を実現します (JS 制御なし)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

Msyql トランザクション分離について知っておくべきこと

トランザクションとは何ですか?トランザクションは、データベース管理システムの実行プロセスにおける論理...

MySQL PXC は IST 送信のみで新しいノードを構築します (推奨)

需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...

MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明

目次パーティション分割メカニズムSELECTクエリINSERT操作DELETE操作更新操作パーティシ...

MySQLインデックスの使用に関するヒントと注意事項

1. インデックスの役割一般的なアプリケーション システムでは、読み取りと書き込みの比率は約 10:...

JavaScript オブジェクト (詳細)

目次JavaScript オブジェクト1. 定義2. オブジェクトの分類3. オブジェクトを定義する...

HTMLウェブページテーブル構造化マークアップの応用に関する簡単な説明

Web テーブルの構造マークアップについて説明する前に、いくつかの画像を見てみましょう。 HTML ...

あまり多くのコードを書かずに、ハイパーリンクを使ってシンプルで美しいカスタムチェックボックスを実装できます。

今日ふと、HTML でチェックボックスのスタイルを変更できる範囲が限られていることと、チェックボック...

VMware 仮想マシンのネットワークの問題の解決方法

目次1. 問題の説明2. 問題解決1. 仮想マシンシステムのインストール時にネットワークがない場合2...