tkuchikiの日記

新ブログ https://blog.tkuchiki.net

application で認証した後に nginx で static file を配信する

application で認証している場合のみファイルをダウンロードさせたい場合があると思いますが、
そんなときの設定例です。
以下に簡単に試す方法を記載しています。

tkuchiki/nginx-direct-data-transfer-sample · GitHub

例では Basic 認証ですが、実際はちゃんとした認証がいいでしょう。
application 側で http headr に、
X-Accel-Redirect としてファイルのパスを追加すると、
nginx から static file を配信することができます。

X-Accel-Redirect を使用しなくても、
nginx の proxy cache がききますが、
大容量ファイルの配信を行う場合、
proxy cache の作成に Disk I/O、CPU リソースを大量に使ってしまう可能性があります。

sinatra の場合、以下のようになります。

content_type "image/png"
headers "X-Accel-Redirect" => "/img/black.png"
status 200

これで負荷を低減することができます。