nginxでbooster-httpを保護する

Filecoin

HTTP でファイルを提供することで、ストレージプロバイダは HTTP サーバと相互作用するツールのエコシステムを利用することができます。例えば、nginx を使用すると、SP はファイルをダウンロードできる人、1 秒あたりのリクエスト数、各クライアントが 1 秒あたりで使用できるダウンロード帯域幅を制限できます。

デフォルトでは、nginxは設定ファイルを/etc/nginxに配置します。

デフォルトの設定ファイルは、/etc/nginx/sites-available/default です。

IPFSゲートウェイは/ipfsからファイルを提供するので、ロケーション/ipfs/のサーバーブロックを追加します。nginxサーバはポート7575でリッスンし、ポート7777でbooster-httpにリクエストを転送します:

# ipfs gateway config

server {

  listen 7575 default_server;

  listen[::]: 7575 default_server;

  location / ipfs / {

    proxy_pass [http://127.0.0.1:7](http://127.0.0.1:7878/)777;

  }

}

アクセスを制限する

標準の.htaccessファイルを使用して、IPFSゲートウェイへのアクセスを制限してみましょう。ユーザー名とパスワードを設定した.htaccessファイルを設定する必要があります。aliceという名前のユーザーを作成します:

$ mkdir /etc/nginx/ipfs-gateway.conf.d

$ htpasswd -c /etc/nginx/ipfs-gateway.conf.d/.htpasswd alice

New password:

Re-type new password:

Adding password for user alice

etc/nginx/sites-available/defaultの.htaccessファイルを含めます:

location /ipfs/ {

  # htaccess authentication

  auth_basic “Restricted Server”;

  auth_basic_user_file /etc/nginx/ipfs-gateway.conf.d/.htpasswd;

  proxy_pass [http://127.0.0.1:7878](http://127.0.0.1:7878/);

}

これで、/ipfsというパスで任意のURLを開くと、サインインダイアログが表示されるようになりました:

レートリミットの設定

ユーザーが1秒間にあまりにも多くのリクエストをするのを防ぐために、レートリミットを追加してみましょう。

まず、/etc/nginx/ipfs-gateway.conf.d/ipfs-gateway.confにレート制限を設定するファイルを作成します。このファイルに、クライアントIPごとに、1秒間に1リクエストというリクエストゾーン制限を追加します:

limit_req_zone $binary_remote_addr zone=client_ip_10rs:1m rate=1r/s;

etc/nginx/sites-available/defaultからipfs-gateway.confをインクルードし、リクエストが多すぎる場合の応答をHTTPレスポンスコード429に設定します:

include /etc/nginx/ipfs-gateway.conf.d/ipfs-gateway.conf;

server {

  listen 7575 default_server;

  listen [::]:7575 default_server;

  location /ipfs/ {

  # htaccess authentication

  auth_basic “Restricted Server”;

  auth_basic_user_file /etc/nginx/ipfs-gateway.conf.d/.htpasswd;

  limit_req zone=client_ip_10rs;

  limit_req_status 429;

  proxy_pass http://127.0.0.1:7878;

  }

}

これで、/ipfs以下のパスでブラウザの更新ボタンを1秒間に1回以上クリックすると、429のエラーページが表示されるようになりました:

帯域制限について

booster-httpからデータをダウンロードする際に、クライアントが占有する帯域幅を制限したい場合があります。各クライアントごとに異なるレートで帯域制限を設定してみましょう。

bobという新しい.htaccessユーザを作成します:

$ htpasswd /etc/nginx/ipfs-gateway.conf.d/.htpasswd bob

etc/nginx/ipfs-gateway.conf.d/ipfs-gateway.conf に .htaccess のユーザー名から帯域制限へのマッピングを追加してください:

map $remote_user $bandwidth_limit {

  default  1k;

  “alice”  10k;

  “bob”    512k;

}

etc/nginx/sites-available/defaultに帯域制限を追加します:

location /ipfs/ {

  # htaccess authentication

  auth_basic “Restricted Server”;

  auth_basic_user_file /etc/nginx/ipfs-gateway.conf.d/.htpasswd;

  limit_rate $bandwidth_limit;

  limit_req zone=client_ip_10rs;

  limit_req_status 429;

  proxy_pass [http://127.0.0.1:7878](http://127.0.0.1:7878/);

}

帯域制限を実証する最も簡単な方法は、CURLを使用して、ユーザーalice、そしてbobでファイルをダウンロードすることです:

Average Dload欄(ダウンロード速度の平均値)の違いに注目してください。

このセクションでは、nginx がアクセス制限、レート制限、帯域幅制限を設定できる方法をほんの少し紹介しました。特に、リクエストトークンやJWTトークンを使って制限を追加することができます。このセクションの例は、Deploying NGINX as an API Gatewayから引用したもので、より詳細に説明されています。

まずは、Boostの最新リリース(v1.7.2)に更新して、新しいbooster-http機能を試してみてください。このブログ記事の例に従ってbooster-httpを保護することもできますし、http検索に関するBoostのドキュメントで詳細を確認することもできます。

Boostの最新情報は、Githubをフォローしてください。Boost Discussion Boardでは、プロジェクトの将来の方向性を決定するためのフィードバックや要望をお寄せください。

IJC-media

IJC-media

IPFSを中心とした技術による日本の産業競争力の向上を目指すIPFS JAPAN コンソーシアムが、最新の世界動向や業界情報を配信するメディアサイト

関連記事

コメント

この記事へのコメントはありません。

TOP