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

推薦する

Nginx+tomcat ロードバランシングクラスタの実装方法

実験環境は以下のとおりですここでは、4 台のサーバー (1 台の nginx、負荷用の 2 台の t...

エラー 1045 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されました (パスワード使用: YES) 実用的な解決策

昨日はデータベースへの接続に問題はありませんでしたが、今日はデータベースへの接続時にこのエラーが報告...

CSS3 で画像ドロワー効果を実装するためのサンプル コード

いつものように、まずは画像効果を投稿しましょう: このエフェクトの原理は非常にシンプルです。CSS3...

CocosCreator システムイベントがどのように生成され、トリガーされるかについての詳細な説明

目次環境まとめモジュール機能関連文書ソースコード分析CCGame.js CCInputManager...

CSS3 フィルター属性の使い方の紹介

1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント。ウェブサイトのアクセス速度...

MySQL の計画タスクとイベント スケジュール例の分析

この記事では、例を使用して、MySQL の計画されたタスクとイベントのスケジュールについて説明します...

JSを段階的に学ぶ方法についての簡単な説明

目次概要1. jsの位置づけを明確に理解する2. 明確な学習パス3. 自己規律と粘り強さ4. 練習し...

jsネイティブカルーセルプラグインの制作

この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...

Dockerイメージの階層化の原理の詳細な説明

ベースイメージベースイメージには 2 つの意味があります。他のイメージに依存せず、ゼロから構築します...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル (一般)

MySQLサービス8.0.14のインストール(一般)の参考までに、具体的な内容は次のとおりです。イ...

Zookeeperスタンドアロン環境とクラスタ環境の構築

1. 単一マシン環境の構築# 1.1 ダウンロードZookeeper の対応するバージョンをダウンロ...

Nginx ロケーション設定のチュートリアル (ゼロから)

基礎位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。実際のロケーションの一致順...

W3C チュートリアル (2): W3C プログラム

W3C 標準化プロセスは 7 つの異なるステップに分かれています。 W3C 標準化プロセスは 7 つ...