Nginx+Unicorn:静的ファイルをNginxで配信しようとしてハマった

目的

Nginx + Unicorn でアプリを動かしている状態で、/static 以下の URL に対するリクエストだけ /var/www/html_doc から配信したい。

ダメだった設定

ググっていくつかのページを参照しながら、次のように location ディレクティブを設定した。

location /static {
    root /var/www/html_doc/;
    break;
}

これだとうまくいかない。

原因と解決

error.log を見てみると、/static/path/to/file.html にアクセスした時に /var/www/html_doc/static/path/to/file.html を探しているのが分かった。どうも URL の一部である /static は置き換えてくれるわけじゃないらしい。
というわけで、下のように自前で rewrite したらうまくいった。

location /static {
    root /var/www/html_doc/;
    rewrite '^/static(.*)$' $1;
    break;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください