nginx で指定したメソッド以外のアクセスを拒否する
POSTにのみレスポンスするAPIサーバーを書いたので、リバースプロキシになっているNginxに
POST以外のアクセスを拒否する設定を書いておこうと思い立ったのが経緯。
探してもなかなか見当たらなかった(公式には書いてあったけど)ので、メモメモ。
Ex. POST以外を拒否
if ($request_method !~ ^(POST)$ ) { return 405; }
複数指定する場合は以下
Ex. GET/POSTを許容
if ($request_method !~ ^(GET|POST)$ ) { return 405; }
逆に一個だけ拒否、とかは以下
Ex. DELETEのみ拒否
if ($request_method ~ ^(DELETE)$ ) { return 405; }
今回は 405 Method Not Allowed を返したけど、444 No Response でもいいのかな?
とりあえずこれで中のAPIサーバーまでいかなくなりました。
Ex. 80へのアクセスをローカルの3000に流し、POSTのみ許可する雑な例
server { listen hostname:80 default_server; location / { if ($request_method !~ ^(POST)$ ) { return 405; } proxy_pass http://127.0.0.1:3000; } }