Nginx リバース プロキシを使用して go-fastdfs を実行する例

Nginx リバース プロキシを使用して go-fastdfs を実行する例

背景

go-fastdfs は、http プロトコルをサポートする分散ファイルシステムです。一般的なプロジェクトでは、ファイルシステムのアドレスが直接公開されることはほとんどありません。ほとんどは、nginx などのソフトウェアを介して逆変換されます。当社の比較的特殊なビジネスおよびネットワーク環境シナリオのため、ハイブリッドクラウドネットワークシステムは、パブリックネットワーク部分 (パブリッククラウド) とイントラネット部分 (プライベートクラウド) で構成されています。パブリッククラウドは主に出入り口として機能し、いくつかの監査および認証アプリケーションを実行して上流の要求を処理し、プライベートクラウドの処理回数を減らしてパフォーマンスを向上させます。そのため、パブリック ネットワーク環境では、プライベート クラウドによって提供されるサービスにアクセスするには、リバース プロキシを使用する必要があります。ファイルシステムへのアクセスについても同様です。外部ネットワーク要求を go-fastdfs にリバースプロキシできるように nginx を構成するにはどうすればよいでしょうか?この記事では、手順ごとに説明します。

一般的な構成

一般的に、nginx に精通している友人は、リバース プロキシを構成する必要がある場合は、ロケーション コンテキストとプロキシ モジュールを直接記述できることを知っています。カスタム プレフィックスが必要な場合は、書き換えモジュールを使用できます。簡単な例は次のとおりです。

場所 ~ /dfs/group([0-9]) {
 proxy_pass http://localhost:8080;
 ^/dfs/(.*)$ /$1 を書き換えて、break;
 proxy_set_header ホスト $host:$server_port;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

この時点では、一般的な反生成構成は問題ありませんが、go-fastdfs では問題ないでしょうか? go-fastdfs の場合、一般的なアップロードは問題ありませんが、tus を使用したブレークポイントの再開にはまだ不十分です。なぜでしょうか? tus サーバーは 301 リダイレクトを返し、特定のリクエスト ヘッダーを伝送する必要があるため、特別な設定が必要です。

Tus反生成構成をサポート

TUS 逆生成、301 リダイレクト ロケーション書き換え、および特定のリクエスト ヘッダー転送をサポートする必要がある場合、どのように構成すればよいでしょうか?以下の設定を参照してください

場所 ~ /dfs1/group([0-9]) {
 access_log ログ/dfs/access.log メイン;
 error_log ログ/dfs/error.log エラー;
 ^/dfs1/(.*)$ /$1 を書き換えて、break;
 proxy_pass http://localhost:8051;

 # リクエストとレスポンスのバッファリングを無効にする
 proxy_request_buffering をオフ;
 proxy_buffering をオフ;
 プロキシ_http_バージョン 1.1;

 proxy_set_header ホスト $host:$server_port;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 # server_nameがパブリックドメイン名でない場合は、この場所をipに設定できます
 proxy_set_header X-Forwarded-Host $hostname;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header アップグレード $http_upgrade;
 proxy_set_header 接続「アップグレード」;
 # プレフィックスと書き換えが使用されるため、返される場所を変更してリバース プロキシ プレフィックス proxy_redirect ~^(.*)/group([0-9])/big/upload/(.*) /dfs/group$2/big/upload/$3 を追加する必要があります。
 クライアントの最大ボディサイズ 0;
}

上記の 2 つの構成は proxy_redirect と client_max_body_size であることに注意してください。最初の構成は、tus サーバーによって返されるリダイレクト ロケーションにカスタム プレフィックスが付いていないため、カスタム プレフィックスを自分で追加する必要があるためです。ここでは /dfs を使用します。他の場合は変更してください。 2 つ目は client_max_body_size です。これを 0 に設定すると、アップロードされたファイルのサイズに関係なく、リクエストが大きすぎる問題は報告されず、直接転送されます。設定する必要がある場合は、chunkSize 以上の数値を設定してください。 chunkSize とは何ですか? tus クライアントがチャンクでアップロードする際の各チャンクのサイズを指します。詳細については、公式ドキュメントを参照してください。

負荷分散構成

クラスター サーバーが構成されている場合、アップロードまたはダウンロードの負荷を分散するにはどうすればよいですか?逆生成を行うには nginx を使用します。これは、upstream モジュールで実現できます。詳細については、次の構成を参照してください。

アップストリームdfs_stream {
 サーバー ホスト1:ポート;
 サーバー ホスト2:ポート;
 ip_ハッシュ;
}

上記の設定は一般的な負荷分散と変わりません。注意する必要があるのは、ip_hash の設定だけです。なぜでしょうか?ブレークポイント レジュームを使用する場合、ファイルはブロック単位でアップロードされるため、ip_hash でない場合は、最初の数個がサーバー A にアップロードされ、最後の数個がサーバー B にアップロードされる可能性があります。この場合、ファイルは完全ではないため、この問題に注意する必要があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx リバース プロキシでセッション永続性を実装する 2 つの方法の詳細な説明
  • nginxリバースプロキシのマルチポートマッピングの実装
  • Nginx リバース プロキシはポート 80 のリクエストを 8080 に転送します
  • Nginxリバースプロキシ設定でプレフィックスが削除される
  • Nginx リバースプロキシの例の詳細な説明

<<:  シンプルな画像切り替えを実現するJavaScript

>>:  MySQL 5.7.21 のインストールと設定のチュートリアル

推薦する

Centos7でのパーティションのフォーマットとマウントの実装

Linux では、ハードディスクの追加やパーティションの再マウントといった状況に頻繁に遭遇します。こ...

Linux カーネル デバイス ドライバー proc ファイル システム ノート

/***************** * proc ファイルシステム***************...

Pure CSS3はdivの出入りを順番に実現します

この記事は主に、純粋な CSS3 を使用して div が順番に出入りする効果を紹介します。一定の参考...

HTML の META タグの使用に関するヒントの例

HTML メタタグHTML メタタグは、Web ページのコンテンツに関する情報をブラウザや検索エンジ...

要素複数フォーム検証の実装

プロジェクトでは、フォーム テストが頻繁に発生します。単一のフォーム テストについては、詳細な紹介が...

Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順

struts2 アクションの実行後にジャンプした jsp が表示されると、css が機能しません。問...

複数人チャットルームを実現する js コード

この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有して...

HTML でフォーム入力やその他のテキスト ボックスを読み取り専用にして編集不可にする方法

場合によっては、フォーム内のテキスト ボックスを読み取り専用にして、ユーザーがその中の情報を変更でき...

nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

IPツールを取得 lombok.extern.slf4j.Slf4j をインポートします。 org....

IE ラベル LI テキスト折り返し問題について

私は長い間この問題に悩まされていましたが、検索してみたところ、実際にこの問題を解決した人がいることが...

大量のデータを含むエレメントのシャトルボックスで「すべて選択」をクリックするとスタックする問題の解決方法

目次解決策1: EUIの転送コンポーネントをコピーして変更し、プロジェクトディレクトリに導入する解決...

Docker イメージのインポートとエクスポートのコード例

Dockerイメージのインポートとエクスポートこの記事では、移行、バックアップ、アップグレードなどの...

Dockerイメージを素早くデプロイして実行する最新のIDEAプロセスの詳細な説明

背景docker とアイデアを使用して、Java Web の開発、展開、運用までのプロセス全体を実現...

Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順

1. はじめに以前のプログラム アーキテクチャは次の形式になります。プログラムのサイズが大きくなると...

MySQLのlike演算子の詳細

1. はじめに不明な値または部分的に既知の値をフィルタリングする場合は、like 演算子を使用でき...