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 のインストールと設定のチュートリアル

推薦する

6つの珍しいHTMLタグ

まず: <abbr> または <acronym>これら 2 つの記号は同じ意...

docker を使用して Redis マスター/スレーブを構築する方法

1. Docker環境を構築する1. Dockerfileを作成する Centos:latest か...

フレームセットの高さを設定する際のインターフェース変形の解決策

現在、プロジェクトを作成しました。インターフェースは次のとおりです。これはフレームセットを使用して行...

Centos7.4 サーバーへの Apache のインストールとインストール プロセス中に発生した問題の解決策

この記事では、CentOS 7.4 サーバーに Apache をインストールする方法と、インストール...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

Ubuntu システムにおけるネットワーク構成ファイルの分析と説明

今日は奇妙なネットワーク問題に遭遇しました。調査プロセスといくつかの構成状況を記録し、Linux で...

Vue フロントエンドの Excel ファイルのエクスポートの詳細な実装計画

目次1. 技術の選択2. 技術的な実装vue-json-excelプラグインを使用して実装1. vu...

初心者向け入門チュートリアル⑨:ポータルサイトの構築方法

さらに、ブログ プログラムで構築された記事 Web サイトは常にブログのように見え、カスタマイズでき...

MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ

この記事では、MySQL の null (IFNULL、COALESCE、NULLIF) に関連する...

Vue の計算プロパティ

目次1. 基本的な例2. 計算プロパティキャッシュとメソッド3. 計算プロパティセッター序文:通常、...

メモリ構成が過剰でMySQLが起動できない問題の解決方法

問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...

SSH ポート転送とは何ですか?何の役に立つの?

目次序文1. ローカルポート転送2. リモートポート転送3. 動的ポート転送(SOCKS5) 4. ...

HTML で複数のクラス属性を定義する場合の無効な解決策

HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...

Web デザインにおける HTML フォーマットと長いファイルに関するヒント

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

Linux で特定の時間にコマンドを実行する方法

先日、rsync を使用して LAN 上の別のシステムに大きなファイルを転送していました。非常に大き...