サーバー
nginxで静的ファイルを返す設定、あってますか?
こんばんは、ころすけ(@wg_koro)です。
iPhoneアプリ「RedminePM」と、自宅のRedmineを連携させようとしたんです。そしたら何故かエラーが出る。REST APIも有効にしているし、XMLも読み込みできる。でもiPhoneアプリと連携できない。何故?
nginxの設定間違えてた
手っ取り早く言うと、nginxの設定間違いでした。静的ファイル(CSS,js,jpg..etc)はnginxが直接返すようにしていたんですが、ここの設定にミスがありました。
アクセスログをたどると、プロジェクト一覧を表示するAPI(下記)で404エラーが返ってました。あれ?
/projects.json?key=xxx
JSONなのにpublicディレクトリを見に行こうとしてる。静的ファイル扱いされてる。
…あ。
1 2 3 4 5 6 7 |
# 間違い 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; } |
1 2 3 4 5 6 7 |
# 正解! 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; } |
違いが分かりますか?
location ~ .*.(jpg…) の一番後ろに「$」が入っていない。
これを入れていないと「.js」はもちろん、「.json」もHITしちゃいます。おうふ orz
ま、何はともあれこれでOK。無事にiPhoneアプリと連携できるようになりました。REST APIを使った連携で上手くいかない場合、このあたりをお調べ下さい。
関連記事
2013年10月08日 | Posted in サーバー | 4 Comments »
コメント4件
正解と間違いの違いが全く無いように見える・・・。
>>location ~ .*.(jpg…) の一番後ろに「$」が入っていない。
とありますが、正解の方にも入っていないですよお
失礼しました!
WordPressのコードハイライトツールが「$」の文字をエスケープしないと表示しない仕様だったようです…。修正しました。
ぷぷっ(ˆωˆ )