Nginxで静的ファイルをPOSTで取れない
htmlファイルやtxtファイルといったAPサーバーに送らず、Nginxが自ら処理するアクセスをPOSTで取ろうとすると405エラーを返すという挙動になっているようです。
通常のブラウザアクセスではほぼ起こり得ないパターンですが、ネイティブアプリ向けAPIを作っていてクライアント側が全部のアクセスをPOSTで送ってきたりなんかするときはあるかもしれません(実際、僕が遭遇したパターンはこれです)。
解決法としては2つあります。
- 設定ファイルで何とかする
- ソースコードを変更する
(1.)は、つまり405で来たものを無理やり元のuriにして戻すという手法ですね。
以下の一行をserverディレクティブの中に入れてやるだけでOKです。
error_page 405 = $uri;
ただ、個人的に(1.)の方法はどうなんかなーと思ったので(2.)のように元から断つことにしました。
問題の箇所はsrc/http/modules/ngx_http_static_module.cの207行目あたり*1にある以下のようなコードです。
if (r->method & NGX_HTTP_POST) { return NGX_HTTP_NOT_ALLOWED; }
こいつをコメントアウトしてmake && make installすればOKです。
バージョンアップするときに忘れるといけないので備忘録として。
*1:バージョンによって違うかも