the glue

やってみたことで忘れそうなこと、役立ちそうなことなどをまとめています。たまに何気ない日常の話もします。

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;
    }
}