nginxで静的ファイルを返す設定、あってますか?

こんばんは、ころすけ(@wg_koro)です。

Redmine入り口

iPhoneアプリ「RedminePM」と、自宅のRedmineを連携させようとしたんです。そしたら何故かエラーが出る。REST APIも有効にしているし、XMLも読み込みできる。でもiPhoneアプリと連携できない。何故?

nginxの設定間違えてた

手っ取り早く言うと、nginxの設定間違いでした。静的ファイル(CSS,js,jpg..etc)はnginxが直接返すようにしていたんですが、ここの設定にミスがありました。

アクセスログをたどると、プロジェクト一覧を表示するAPI(下記)で404エラーが返ってました。あれ?
/projects.json?key=xxx
JSONなのにpublicディレクトリを見に行こうとしてる。静的ファイル扱いされてる。

…あ。

[shell]
# 間違い
location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
root /var/www/redmine/public;
index index.html;
expires 30d;
break;
}
[/shell]
[shell]
# 正解!
location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO)$$ {
root /var/www/redmine/public;
index index.html;
expires 30d;
break;
}
[/shell]

違いが分かりますか?

location ~ .*.(jpg…) の一番後ろに「$」が入っていない。

これを入れていないと「.js」はもちろん、「.json」もHITしちゃいます。おうふ orz

ま、何はともあれこれでOK。無事にiPhoneアプリと連携できるようになりました。REST APIを使った連携で上手くいかない場合、このあたりをお調べ下さい。

4件のコメント

  1. 正解と間違いの違いが全く無いように見える・・・。

  2. >>location ~ .*.(jpg…) の一番後ろに「$」が入っていない。

    とありますが、正解の方にも入っていないですよお

  3. 失礼しました!
    WordPressのコードハイライトツールが「$」の文字をエスケープしないと表示しない仕様だったようです…。修正しました。

コメントを残す

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