nginx+FastDFS を使ってファイル管理システムを段階的に構築する

nginx+FastDFS を使ってファイル管理システムを段階的に構築する

1. FastDFS の概要

FastDFS オープンソース アドレス: https://github.com/happyfish100

参考: 分散ファイルシステム FastDFS の設計原則

参考: FastDFS 分散ファイルシステム

個人用パッケージ化された FastDFS Java API: https://github.com/bojiangzhou/lyyzoo-fastdfs-java

1. はじめに

FastDFS は、オープン ソースの高性能分散ファイル システム (DFS) です。 主な機能には、ファイル ストレージ、ファイル同期、ファイル アクセス、高容量、負荷分散などがあります。これは主に大量のデータ保存の問題を解決し、特に小中サイズのファイル (推奨範囲: 4KB < ファイルサイズ < 500MB) をキャリアとして使用するオンライン サービスに適しています。

FastDFS システムには、トラッカー サーバー、ストレージ サーバー、クライアントの 3 つの役割があります。

トラッカー サーバー: トラッキング サーバー。主にスケジュールとバランス調整を担当し、すべてのストレージ サーバーとグループを管理します。起動後、各ストレージはトラッカーに接続し、所属するグループなどの情報をトラッカーに通知し、定期的なハートビートを維持します。

ストレージサーバー: ストレージサーバーは主に容量とバックアップ サービスを提供します。ストレージ サーバーはグループに編成されており、各グループには複数のストレージ サーバーが含まれ、データは相互にバックアップされます。

クライアント: クライアントは、データをアップロードおよびダウンロードするサーバーであり、独自のプロジェクトがデプロイされるサーバーでもあります。

2. FastDFSストレージ戦略

大容量をサポートするために、ストレージ ノード (サーバー) はボリューム (またはグループ) に編成されます。ストレージ システムは 1 つ以上のボリュームで構成されます。ボリューム間のファイルは互いに独立しています。すべてのボリュームのファイル容量の合計が、ストレージ システム全体のファイル容量になります。ボリュームは 1 台以上のストレージ サーバーで構成できます。ボリューム内のストレージ サーバー内のファイルは同一です。ボリューム内の複数のストレージ サーバーは、冗長バックアップと負荷分散の役割を果たします。

ボリュームにサーバーを追加すると、システムは既存のファイルを自動的に同期します。同期が完了すると、システムは新しく追加されたサーバーを自動的にオンラインに切り替えてサービスを提供します。ストレージ容量が不足したり、不足したりした場合は、ボリュームを動的に追加できます。 1 台以上のサーバーを追加し、新しいボリュームとして構成するだけで、ストレージ システムの容量を拡張できます。

3. FastDFSアップロードプロセス

FastDFS は、クライアント ライブラリの形式で、アップロード、ダウンロード、追加、削除などの基本的なファイル アクセス インターフェイスをユーザーに提供します。

ストレージ サーバーは、定期的にストレージ情報をトラッカー サーバーに送信します。トラッカー サーバー クラスター内に複数のトラッカー サーバーが存在する場合、各トラッカー間の関係は対等であるため、クライアントはアップロード時に任意のトラッカーを選択できます。

Tracker は、クライアントからファイルのアップロード要求を受信すると、そのファイルを保存できるグループをファイルに割り当てます。グループが選択されると、グループ内のどのストレージ サーバーをクライアントに割り当てるかを決定します。ストレージ サーバーが割り当てられると、クライアントはストレージにファイル書き込み要求を送信し、ストレージはファイルのデータ ストレージ ディレクトリを割り当てます。次に、ファイルにファイル ID を割り当て、最後に上記の情報に基づいてファイル名を生成してファイルを保存します。

4. FastDFSのファイル同期

ファイルを書き込む場合、クライアントはグループ内のストレージ サーバーにファイルを書き込むと、ファイルの書き込みが成功したとみなします。ストレージ サーバーがファイルの書き込みを完了すると、バックグラウンド スレッドによって、同じグループ内の他のストレージ サーバーにファイルが同期されます。

各ストレージがファイルを書き込んだ後、バイナリログも書き込まれます。バイナリログにはファイルデータは含まれず、ファイル名などのメタ情報のみが含まれます。このバイナリログはバックグラウンド同期に使用されます。ストレージは、再起動後に同期を続行できるように、グループ内の他のストレージとの同期の進行状況を記録します。進行状況はタイムスタンプの形式で記録されるため、クラスター内のすべてのサーバーのクロックが同期されていることを確認することをお勧めします。

ストレージの同期の進行状況は、メタデータの一部としてトラッカーに報告されます。トラッカーは、ストレージの読み取りを選択するときに、同期の進行状況を参照として使用します。

5. FastDFSによるファイルのダウンロード

クライアントがファイルを正常にアップロードすると、ストレージによって生成されたファイル名が取得されます。その後、クライアントはこのファイル名に基づいてファイルにアクセスできます。

ファイルのアップロードと同様に、クライアントはファイルをダウンロードするときに任意のトラッカー サーバーを選択できます。トラッカーがダウンロード要求をトラッカーに送信する場合、ファイル名情報を含める必要があります。トラッカーはファイル名からファイル グループ、サイズ、作成時間などの情報を解析し、読み取り要求に対応するストレージを選択します。

2. FastDFS環境をインストールする

0. はじめに

動作環境:CentOS7 X64、以下の動作はすべてスタンドアロン環境です。

すべてのインストール パッケージを /softpackages/ にダウンロードし、現在のディレクトリに解凍しました。

最初に行うことは、ホストを変更し、ファイル サーバーの IP アドレスをドメイン名にマップすることです (スタンドアロン TrackerServer 環境)。これは、以降の多くの構成でサーバー アドレスを構成する必要があるためです。IP アドレスが変更された場合は、ホストを変更するだけで済みます。

# vim /etc/hosts

次の行を追加します。これは私のIPです
192.168.51.128 ファイル.ljzsg.com

仮想マシンにローカルでアクセスする場合は、C:\Windows\System32\drivers\etc\hostsに行を追加します。

1. libfastcommonをダウンロードしてインストールする

libfastcommon は、基本環境である FastDFS および FastDHT から抽出された共通 C 関数ライブラリであり、インストールできます。

① libfastcommonをダウンロードする

# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.ta​​r.gz

②減圧

# tar -zxvf V1.0.7.ta​​r.gz
# libfastcommon-1.0.7をインストールします

③コンパイルしてインストールする

# ./make.sh#
./make.sh インストール

④ libfastcommon.so は /usr/lib64/libfastcommon.so にインストールされますが、FastDFS メインプログラムが設定する lib ディレクトリは /usr/local/lib なので、ソフトリンクを作成する必要があります。

# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

2. FastDFSをダウンロードしてインストールする

① FastDFSをダウンロードする

# wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

②減圧

# tar -zxvf V5.05.tar.gz
# cd fastdfs-5.05

③コンパイルしてインストールする

# ./make.sh
# ./make.sh インストール

④ インストール後の対応するファイルとディレクトリ(デフォルト)

A. サービススクリプト:

保存先
ディレクトリ

B. 設定ファイル (これら 3 つは著者が提供したサンプル設定ファイルです):

/etc/fdfs/client.conf.サンプル
/etc/fdfs/storage.conf.サンプル
サンプル

C. コマンド ツールは /usr/bin/ ディレクトリにあります。

fdfs_appender_テスト
fdfs_appender_test1
fdfs_append_file
cfs_crc32 は、
fdfs_delete_file
fdfs_ダウンロードファイル
fdfs_ファイル情報
fdfs_モニター
fdfs_ストレージ
fdfs_テスト
翻訳:
fdfs_trackerd
fdfs_アップロードアペンダー
fdfs_アップロードファイル
停止.sh
再起動.sh

⑤ FastDFSサービススクリプトによって設定されるbinディレクトリは/usr/local/binですが、実際のコマンドは/usr/bin/以下にインストールされます。

2つの方法:

》 まず、FastDFS サービス スクリプト内の対応するコマンド パスを変更します。つまり、2 つのスクリプト /etc/init.d/fdfs_storaged と /etc/init.d/fdfs_tracker 内の /usr/local/bin を /usr/bin に変更します。

# vim fdfs_trackerd
検索と置換コマンドを使用して、統一された変更を行います: %s+/usr/local/bin+/usr/bin
# vim fdfs_storaged
検索と置換コマンドを使用して、統一された変更を行います: %s+/usr/local/bin+/usr/bin

》 2 つ目は、/usr/bin から /usr/local/bin へのソフト リンクを作成することです。私はこの方法を使用します。

# ln -s /usr/bin/fdfs_trackerd /usr/local/bin
# ln -s /usr/bin/fdfs_storaged /usr/local/bin
# ln -s /usr/bin/stop.sh /usr/local/bin
# ln -s /usr/bin/restart.sh /usr/local/bin

3. FastDFS Trackerを構成する

設定ファイルの詳細な説明については、FastDFS設定ファイルの詳細な説明を参照してください。

① /etc/fdfs に移動し、FastDFS トラッカーのサンプル設定ファイル tracker.conf.sample をコピーし、tracker.conf に名前を変更します。

# /etc/fdfs をコピーする
# cp トラッカー.conf.サンプル トラッカー.conf
# vim トラッカー.conf

② tracker.conf を編集します。赤でマークされている部分は変更する必要があり、その他はデフォルトのままにしておきます。

# 設定ファイルが無効かどうか。false は有効であることを意味します。disabled=false
# サービスを提供するポートは port=22122 です
# トラッカーデータとログディレクトリのアドレス(ルートディレクトリが存在する必要があり、サブディレクトリは自動的に作成されます)
ベースパス=/ljzsg/fastdfs/tracker
# HTTP サービスポート http.server_port=80

③トラッカー基本データディレクトリ、つまりbase_pathに対応するディレクトリを作成する

# mkdir -p /ljzsg/fastdfs/tracker

④ ファイアウォールの追跡ポートを開く(デフォルト22122)

# vim /etc/sysconfig/iptables
次のポート行を追加します。
-A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 22122 -j 受け入れる
ファイアウォールを再起動します。
# サービスiptablesを再起動

⑤ トラッカーを起動する

初めて正常に起動すると、/ljzsg/fdfsdfs/tracker/ (設定された base_path) の下に、data と logs の 2 つのディレクトリが作成されます。

こうやって始められます
# /etc/init.d/fdfs_trackerd 開始
上記のソフトリンクを作成し、後でこの方法を使用する場合は、この方法で起動することもできます。
# サービス fdfs_trackerd 開始

FastDFS Tracker が正常に起動され、ポート 22122 がリッスンされているかどうかを確認します。これは、Tracker サービスが正常にインストールされていることを意味します。

# netstat -unltp|grep fdfs

トラッカーを無効にするコマンド:

# サービス fdfs_trackerd を停止

⑥ 起動時にトラッカーを起動するように設定する

# chkconfig fdfs_trackerd をオンにする

または:
# vim /etc/rc.d/rc.local
設定を追加します:
/etc/init.d/fdfs_trackerd 開始

⑦ トラッカーサーバーのディレクトリとファイル構造

Tracker サービスが正常に開始されると、base_path の下に data と logs の 2 つのディレクトリが作成されます。ディレクトリ構造は次のとおりです。

${ベースパス}
 |__データ
 | |__storage_groups.dat: ストレージ グループ情報| |__storage_servers.dat: ストレージ サーバー リスト|__logs
 | |__trackerd.log: トラッカーサーバーのログファイル

4. FastDFSストレージを構成する

① /etc/fdfsディレクトリに入り、FastDFSストレージサンプル設定ファイルstorage.conf.sampleをコピーし、storage.confに名前を変更します。

# /etc/fdfs をコピーする
# cp storage.conf.sample ストレージ.conf
# vim ストレージ.conf

② storage.confを編集する

赤でマークされたものは変更する必要があり、その他はデフォルトのままにしておきます。

# 設定ファイルが無効かどうか。false は有効であることを意味します。disabled=false 

#このストレージサーバーが配置されているグループ(ボリューム)を指定します
グループ名=グループ1

# ストレージサーバーサービスポート port=23000

# ハートビート間隔(秒単位)(これはトラッカーサーバーにハートビートをアクティブに送信することを意味します)
ハートビート間隔=30

# ストレージデータとログディレクトリのアドレス(ルートディレクトリが存在する必要があり、サブディレクトリは自動的に生成されます)
ベースパス=/ljzsg/fastdfs/ストレージ

# ストレージ サーバーは、ファイルを保存するときに複数のパスをサポートします。ここでは、ファイルを保存するためのベース パスの数を設定します。通常は、1 つのディレクトリのみが設定されます。
ストアパス数=1


# store_path_count パスを 0 を基準としたインデックス番号で 1 つずつ設定します。
# store_path0 が設定されていない場合は、base_path に対応するパスと同じになります。
store_path0=/ljzsg/fastdfs/ファイル

# FastDFS はファイルを保存するときに 2 レベルのディレクトリを使用します。ファイルが保存されるディレクトリの数をここで設定します。 
# このパラメータが N のみの場合 (例: 256)、ストレージ サーバーは、初回実行時に store_path の下にファイルを保存するための N * N サブディレクトリを自動的に作成します。
パスあたりのサブディレクトリ数=256

# tracker_server のリスト。tracker_server にアクティブに接続します
# トラッカー サーバーが複数ある場合は、トラッカー サーバーごとに 1 行記述します。tracker_server=file.ljzsg.com:22122# システム同期に許可される期間 (デフォルトは終日)。これは通常、ピーク同期によって発生する問題を回避するために設定されます。同期開始時間=00:00同期終了時間=23:59
# アクセスポート http.server_port=80

③ base_pathディレクトリに対応するストレージ基本データディレクトリを作成する

# mkdir -p /ljzsg/fastdfs/ストレージ

# これは設定されたstore_path0パスです
# mkdir -p /ljzsg/fastdfs/ファイル

④ ファイアウォールでストレージポートを開く(デフォルト23000)

# vim /etc/sysconfig/iptables

次のポート行を追加します。
-A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 23000 -j 受け入れる

ファイアウォールを再起動します。
# サービスiptablesを再起動

⑤ ストレージを開始する

ストレージを有効にする前に、トラッカーが有効になっていることを確認してください。最初の起動が成功すると、/ljzsg/fastdfs/storage ディレクトリの下に、data と logs の 2 つのディレクトリが作成されます。

こうやって始められます
# /etc/init.d/fdfs_storaged 開始

この方法を使用して、後でこの方法を使用することもできます。
# サービス fdfs_storaged 開始

ストレージが正常に起動されているかどうかを確認します。ポート 23000 が監視されているということは、ストレージが正常に起動されていることを意味します。

# netstat -unltp|grep fdfs

ストレージ コマンドをオフにするには:

# サービス fdfs_storaged を停止

ストレージとトラッカーが通信しているかどうかを確認します。

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

⑥ 起動時にストレージを起動するように設定する

# chkconfig fdfs_storaged オン

または:
# vim /etc/rc.d/rc.local
設定を追加します:
/etc/init.d/fdfs_storaged 開始

⑦ ストレージディレクトリ

Tracker と同様に、Storage が正常に起動すると、base_path の下にデータ ディレクトリとログ ディレクトリが作成され、Storage Server の情報が記録されます。

store_path0 ディレクトリの下に、N*N 個のサブディレクトリが作成されます。

5. ファイルアップロードテスト

① Trackerサーバーのクライアント設定ファイルを変更する

# /etc/fdfs をコピーする
# cp client.conf.sample クライアント.conf
# vim クライアント.conf

次の設定を変更し、その他はデフォルトのままにします。

# クライアントデータとログディレクトリ
ベースパス=/ljzsg/fastdfs/クライアント

# トラッカーポート
トラッカーサーバー=file.ljzsg.com:22122

②アップロードテスト

Linuxで以下のコマンドを実行してnamei.jpeg画像をアップロードします。

# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf namei.jpeg

アップロードが成功すると、ファイル ID 番号が返されます: group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

返されるファイル ID は、グループ、ストレージ ディレクトリ、2 レベルのサブディレクトリ、ファイル ID、およびファイル サフィックス (クライアントによって指定され、主にファイルの種類を区別するために使用されます) で構成されます。

3. Nginxをインストールする

上記でファイルは正常にアップロードされましたが、ダウンロードできませんでした。そのため、ファイルへの HTTP アクセスをサポートするサーバーとして Nginx がインストールされます。同時に、後で FastDFS の Nginx モジュールをインストールするための Nginx 環境も必要になります。

ファイルにアクセスするには、StorageServer が配置されているサーバーにのみ Nginx をインストールする必要があります。ここでは単一のマシンなので、TrackerServer と StorageServer は同じサーバー上にあります。

1. nginxに必要な環境をインストールする

① gccのインストール

# yum で gcc-c++ をインストールします

② PCRE pcre-develのインストール

# yum インストール -y pcre pcre-devel

③ zlibのインストール

# yum install -y zlib zlib-devel

④ OpenSSLのインストール

# yum インストール -y openssl openssl-devel

2. Nginxをインストールする

① nginxをダウンロード

# wget -c https://nginx.org/download/nginx-1.12.1.tar.gz

②減圧

# tar -zxvf nginx-1.12.1.tar.gz
# nginx-1.12.1をインストールします

③ デフォルト設定を使用する

# ./configure

④ コンパイルしてインストールする

# 作る
# インストールする

⑤ nginxを起動する

# cd /usr/local/nginx/sbin/
nginx をビルドします。

その他のコマンド
# ./nginx -s 停止
# ./nginx -s 終了
# ./nginx -s リロード

⑥ スタートアップの設定

# vim /etc/rc.local

行を追加します:
ローカル

# 実行権限を設定する
# chmod 755 rc.local

⑦ nginxのバージョンとモジュールを確認する

nginx の sbin ディレクトリに nginx の sbin ディレクトリを作成します。

⑧ ファイアウォールでNginxポートを開く(デフォルトは80)

追加後、このマシンのポート 80 を使用してアクセスできるようになります。

# vim /etc/sysconfig/iptables

次のポート行を追加します。
-A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 80 -j 受け入れる

ファイアウォールを再起動します。
# サービスiptablesを再起動

3. ファイルにアクセスする

シンプルなテストアクセスファイル

① nginx.confを修正する

# vim /usr/local/nginx/conf/nginx.conf

/group1/M00を/ljzsg/fastdfs/file/dataにマップするには、次の行を追加します。
場所 /group1/M00 {
 エイリアス /ljzsg/fastdfs/file/data;
}# nginx を再起動します# /usr/local/nginx/sbin/nginx -s reload

② ブラウザで先ほどアップロードした画像に正常にアクセスします。

http://file.ljzsg.com/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

4. FastDFS 構成 Nginx モジュール

1. Nginxモジュールをインストールして設定する

① fastdfs-nginx-module モジュールの説明

FastDFS は Tracker サーバーを介してストレージ サーバーにファイルを保存しますが、同じグループ内のストレージ サーバー間でファイルをコピーする必要があるため、同期が遅延します。

Tracker サーバーがファイルを 192.168.51.128 にアップロードし、アップロードが成功した後にファイル ID がクライアントに返されるとします。

このとき、FastDFS ストレージ クラスター メカニズムは、このファイルを同じグループ 192.168.51.129 内のストレージに同期します。ファイルがコピーされる前に、クライアントがこのファイル ID を使用して 192.168.51.129 上のファイルを取得すると、ファイルにアクセスできないことを示すエラー メッセージが表示されます。

fastdfs-nginx-module は、ファイル リンクをソース サーバーにリダイレクトしてファイルを取得し、クライアントのレプリケーション遅延によって発生するファイル アクセス エラーを回避できます。

② fastdfs-nginx-moduleをダウンロードして解凍する

# なぜここにはこんなに長い文字列があるのでしょうか? マスターの最新バージョンと現在の nginx の間にバージョンの問題があるためです。
# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

# 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip を解凍します

# 名前変更 # mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master

③ Nginxの設定

nginxにモジュールを追加する

# まず nginx サービスを停止します# /usr/local/nginx/sbin/nginx -s stop 解凍したパッケージ ディレクトリに入ります# cd /softpackages/nginx-1.12.1/

# モジュールを追加# ./configure --add-module=../fastdfs-nginx-module-master/src

再コンパイルしてインストールします # make && make install

④ Nginxモジュールを表示する

# /usr/local/nginx/sbin/nginx -V

以下はモジュールが正常に追加されたことを示しています

⑤ fastdfs-nginx-moduleソースコードの設定ファイルを/etc/fdfsディレクトリにコピーし、変更します。

# cd /softpackages/fastdfs-nginx-module-master/src

# mod_fastdfs.confを/etc/fdfs/にコピーします

以下の設定を変更します。その他のデフォルト

#接続タイムアウト connect_timeout=10

トラッカーサーバー
トラッカーサーバー=file.ljzsg.com:22122
# StorageServer のデフォルトポート storage_server_port=23000

# ファイルIDのURIに/group**が含まれている場合はtrueに設定します
url_have_group_name = true

# ストレージ設定の store_path0 パスは storage.conf のパスと一致している必要があります store_path0=/ljzsg/fastdfs/file

⑥ FastDFS設定ファイルを/etc/fdfsディレクトリにコピーする

# cd /softpackages/fastdfs-5.05/conf/

# cp anti-steal.jpg http.conf mime.types /etc/fdfs/

⑦ nginxの設定とnginx.confの変更

# vim /usr/local/nginx/conf/nginx.conf

設定、その他のデフォルトを変更する

fastdfs-nginxモジュールをポート80に追加します

場所 ~/group([0-9])/M00 {
 ngx_fastdfs_モジュール;
}

知らせ:

listen 80 ポート値は、/etc/fdfs/storage.conf の http.server_port=80 に対応している必要があります (以前は 80 に変更されていました)。別のポートに変更する場合は、それを統合し、ファイアウォールでポートを開く必要があります。

場所の設定については、複数のグループがある場合は、場所を ~/group([0-9])/M00 に設定します。グループがない場合は、グループは必要ありません。

⑧ /ljzsg/fastdfs/file ファイル保存ディレクトリの下にソフトリンクを作成し、実際にデータが格納されているディレクトリにリンクします。この手順は省略できます。

# ln -s /ljzsg/fastdfs/file/data/ /ljzsg/fastdfs/file/data/M00

⑨ nginxを起動する

nginx のディレクトリは sbin にあります。

印刷場所が次のとおりであれば設定は成功です

⑩ アドレスバーにアクセスします。

ファイルをダウンロードできればインストールは成功です。 3 番目のポイントでの nginx ルーティング アクセスの直接使用とは異なり、ここでは fastdfs-nginx-module モジュールがファイル リンクをソース サーバーにリダイレクトしてファイルを取得するように構成されていることに注意してください。

http://file.ljzsg.com/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

最終的なデプロイメント構造図(盗用画像):以下の構造に従って環境を構築できます。

5. Javaクライアント

ファイル システム プラットフォームが構築されたので、システム内でアップロードとダウンロードを実装するためのクライアント コードを記述する必要があります。以下は簡単なテスト コードです。

1. まず、FastDFSクライアントのJava開発環境を構築する必要があります。

① プロジェクト内の依存関係管理には Maven を使用します。pom.xml に以下の依存関係を導入できます。

<依存関係>
 <groupId>net.oschina.zcx7878</groupId>
 <artifactId>fastdfs-client-java</artifactId>
 <バージョン>1.27.0.0</バージョン>
</依存関係>

その他の方法については、公式ドキュメントを参照してください: https://github.com/happyfish100/fastdfs-client-java

② 設定ファイルのインポート

パッケージ内の fastdfs-client.properties.sample または fdfs_client.conf.sample をプロジェクトに直接コピーし、.sample を削除できます。

ここでは、fastdfs-client.properties.sample の設定をプロジェクト設定ファイル config.properties に直接コピーし、tracker_servers を変更します。この設定ファイルを読み込むだけです

2. クライアントAPI

個人パッケージ化された FastDFS Java API は github に同期されています: https://github.com/bojiangzhou/lyyzoo-fastdfs-java.git

6. 権限制御

以前は、http ファイル アクセスをサポートするために nginx を使用していましたが、このファイル サーバーには誰でも直接アクセスできるため、いくつかの権限制御が行われます。

FastDFS の権限制御は、サーバー側でトークン検証を有効にすることです。クライアントは、ファイル名、現在の Unix タイムスタンプ、および秘密キーに基づいてトークンを取得します。アドレスにトークン パラメータを追加することで、http 経由でファイルにアクセスできます。

① サーバー上でトークン検証を有効にする

http.confを変更する
# vim /etc/fdfs/http.conf

トークン検証を有効にするには、true に設定します http.anti_steal.check_token=true トークンの有効期限を秒単位で設定します http.anti_steal.token_ttl=1800
キーは、クライアント構成ファイル http.anti_steal.secret_key=FASTDFS1234567890 の fastdfs.http_secret_key と一致している必要があります。

トークンチェックが失敗した場合、返されるページは http.anti_steal.token_check_fail=/ljzsg/fastdfs/page/403.html です。

サービスを再起動することを忘れないでください。

② クライアントの設定

クライアントは次の 2 つのパラメータを設定するだけで、両側のキーは一貫した状態を保ちます。

# トークンアンチホットリンク機能
fastdfs.http_anti_steal_token=true
# 鍵
fastdfs.http_secret_key=FASTDFS1234567890

③ クライアントがトークンを生成する

ファイルにアクセスするには、生成されたトークンと Unix タイムスタンプが必要です。返されるトークンは、トークンとタイムスタンプの連結になります。

その後、トークンを次のアドレスに連結することでアクセスできます: file.ljzsg.com/group1/M00/00/00/wKgzgFnkaXqAIfXyAAEoRmXZPp878.jpeg?token=078d370098b03e9020b82c829c205e1f&ts=1508141521

/**
  * サーバーにアクセスするためのトークンを取得し、アドレスに追加します*
  * @param filepath ファイルパス group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg
  * @param httpSecretKey キー * @return トークンを返します。例: token=078d370098b03e9020b82c829c205e1f&ts=1508141521
  */
 パブリック静的文字列 getToken(文字列ファイルパス、文字列 httpSecretKey){
  // UNIX 秒
  int ts = (int) Instant.now().getEpochSecond();
  //トークン
  文字列トークン = "null";
  試す {
   トークン = ProtoCommon.getToken(getFilename(filepath), ts, httpSecretKey);
  } キャッチ (UnsupportedEncodingException e) {
   e.printStackTrace();
  } キャッチ (NoSuchAlgorithmException e) {
   e.printStackTrace();
  } キャッチ (MyException e) {
   e.printStackTrace();
  }

  StringBuilder sb = 新しい StringBuilder();
  sb.append("token=").append(token);
  sb.append("&ts=").append(ts);

  sb.toString() を返します。
 }

④ 注意事項

生成されたトークンの検証が失敗した場合は、次の 2 つのチェックを実行してください。
A. トークン生成関数 (ProtoCommon.getToken) が呼び出され、渡されたファイル ID にグループ名が含まれていないことを確認します。送信されるファイルIDの形式は次のとおりです: M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg

B. サーバー時間が基本的に一貫していることを確認します。サーバー時間はあまり異なってはならず、分単位で異なってはならないことに注意してください。

⑤ 一方、システムファイルのプライバシーが高い場合は、Nginx を http 経由でアクセスするように構成しなくても、fastdfs-client が提供する API を介して直接アクセスできます。 Nginx を設定する主な目的は、サーバー ファイル (画像など) にすばやくアクセスすることです。権限の検証も必要な場合は、クライアントがトークンを生成する必要がありますが、これは実際には意味がありません。

重要なのは、FastDFS が一部のリソースにトークン検証を追加して部分的に開く方法がわからなかったことです。ご存知の方がいらっしゃいましたらメッセージを残してください。

さて、上記は FastDFS を使用してファイル システムを構築し、単一のマシンでアップロードとダウンロードを行うプロセスです。

<<:  Vue+Router+Element でシンプルなナビゲーションバーを実装する

>>:  MySQL 8.0.19 インストール詳細チュートリアル (Windows 64 ビット)

推薦する

CSS で overflow-y: visible; が機能しない理由の分析と解決

シナリオ最近の要件は、モバイル デバイス用の h5 ページです。これには、選択可能なカードの行が必要...

Reactはページの透かし効果の全プロセスを実現します

目次序文1. 使用例2. 実施プロセス3. コンポーネントコード要約する序文1. cavans では...

Centos システムの指定された場所に Nginx をインストールする方法

Centos システムの指定された場所に Nginx をインストールするにはどうすればいいですか?は...

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック...

DockerにELKをインストールしてJSON形式のログ分析を実装する方法

ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...

Alibaba Cloud に Docker をインストールする際の問題と解決策

質問Alibaba Cloud イメージを使用して Docker をインストールすると、次の図に示す...

MySQLを使用して列内の異なる値の数をカウントする例

序文この記事で実装されている要件は、実際には非常に一般的です。たとえば、ユーザーが登録したチャネルを...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

MySQLでテーブルデータを削除する方法

MySQL でデータを削除する方法は 2 つあります。1 つは DELETE ステートメント、もう ...

動的なデジタル時計を実装するJavaScript

この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...

HTMLページをクリックしてダウンロードファイルを実装する2つの方法

1. <a>タグを使用して完了します <a href="/user/te...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...

Vue+Springbootでインターフェースシグネチャを実装するためのサンプルコード

1. 実装のアイデアインターフェース署名の目的は、リクエストパラメータが改ざんされていないか、リクエ...

vue.config.js からプロジェクト最適化までの vue2.x 構成

目次序文vue.config.js 構成オプションパッケージサイズを縮小するためのパッケージの最適化...

モバイルデバイス用のメタタグ設定の完全なリスト

序文以前フロントエンドを勉強していたとき、メタタグに対する私の理解はこの一文だけでした。 <メ...