web-dev-qa-db-ja.com

set_real_ip_fromと組み合わせてallow / denyを使用するにはどうすればよいですか?

私のnginxバックエンドサーバーは私のフロントエンド1.2.3.4からのリクエストのみを受け入れる必要があります。ただし、nginxにも正しいIPアドレスを記録させたいので、set_real_ip_fromを使用します。ただし、これを行うと、構成のallowルールが一致せず、nginxは常に403を返します。関連する構成は次のとおりです。

allow  1.2.3.4;
deny  all;

set_real_ip_from  1.2.3.4;
real_ip_heaader  X-Real-IP;

どうすればこの問題を克服できますか?

4
Jay

私はこれを自分で探していましたが、解決策を見つけるのに「しばらく」かかったので、他の人が簡単に使えるようにここに置きます。

この場合、allow/deny構造は、実際のIP変数では機能しないため、機能しません。

代わりに、$ http_x_forwarded_for変数を使用できます:

## this goes before server section
## it allows us to check if forwarded ip is allowed to make request or not
map $http_x_real_ip $allowed {
    default false;

    ## your ip goes here
    ~\s111.111.111.111 true;
    ## other ips you want to allow
}

server {
    ## ... other instructions...

    set_real_ip_from  1.2.3.4;
    real_ip_header  X-Forwarded-For;

    ## you may want to add this to get "truly" real ip
    real_ip_recursive  on;

    ## ... other instructions...

    ## or any other location you need
    location / {
        if ($allowed = false) {
            return 403;
        }
        ## ... other instructions...
    }
}
2