EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

nginx の X-Accel-Redirect を試す

先日Twitterを眺めていたところ、"X-Accel-Redirect"というキーワードが目に止まりました。 調べてみると、バックエンドのレスポンスからnginxで内部リダイレクトを行う仕組みであり、用途としてはバックエンドで認証を行いnginxにコンテンツ配信を任せることが出来るようです。

試してみるため、バックエンドは以下のヘッダを返すだけの簡単な実装を用意しました。

nginxは以下の設定を行います。 internalを指定して外部からアクセス出来ないlocationを用意します。 バックエンドのヘッダで"/movie/"以下を指定することで、"/var/share/movie/"以下のコンテンツをダウンロードすることが出来ます。

location ^~ /movie/ {
    alias /var/share/movie/;
    internal;
}

バックエンドは以下のようにヘッダを指定します。 今回は検証のため他の処理を入れていませんが、実際に利用する場合は認証を行うことになると思います。

response.addHeader("Content-Type", "octet-stream");
response.addHeader("X-Accel-Redirect", "/movie/sample.mp4");

以上の作業で、動画のダウンロードを行うことが出来ました。