2016-01-03 20 views
6

Nginxサーバープールは、CDN +ロードバランサセットアップの背後にあるです。 CDNはHTTPの "read"リクエスト(GET、HEAD、OPTIONS)をキャッシュし、 "write"リクエスト(POST)をバイパスします。Nginxのレート制限と実際のIPモジュール

私はこのような構成でX-FORWARD-FORヘッダからクライアントのIPアドレスを取得するためにのreal_ipモジュールを使用しています:

set_real_ip_from <trusted_cidr1> 
set_real_ip_from <trusted_cidr2> 
... 
real_ip_recursive on; 
real_ip_header X-Forwarded-For; 

それが働く確認することができます。しかし、私はまた、ロボットや攻撃を避けるために、クライアントごとの要求率を(私はすべてのIPは個別のクライアントであると仮定します)制限したいので、次のように、私はlimit_reqモジュールを使用しています:

http { 

    limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; 

    location/{ 
    limit_req zone=perip burst=5; 
    } 

} 

私の質問は:$ binary_remote_addrは、私がreal_ipを設定した、または私が期待しているように内部的にこれを上書きしない、元のクライアントのIP、要求の実際の発信元を想定しますか?もしそうでなければ、それは確かに私に深刻な問題を引き起こすでしょう。

Nginxは十分にスマートだと思いますが、ドキュメンテーションで確認できず、実際の分散シナリオでこれをテストする機会がなかったら、以前のこれを経験したことが私には分かります。

ありがとうございます。

答えて

16

これまでの回答は無かったので、やっています。

私はそれを自分自身を検証 - のreal_ipモジュールは内部で接続元の値を変更し、すべての意図や目的のために、接続のソースに関連するすべてのものは、IP(X-フォワード-についてはから得たことになり、X-Real-IPなど)、$ binary_remote_addrなどがあります。したがって、リクエスト制限の設定で使用することは安全です。

Obs:一方で、接続元IPを$ realip_remote_addrに保存します。