2

私のnginxサーバーは、Varnishの背後にあるhaproxyの背後にあります:

Web をリクエスト => Varnish => HaProxy => Nginx

私が抱えている問題は、クライアントの IP アドレスを取得できないことです。nginx ログには、haproxy の IP アドレスしかないため、XForwardfor が悪いと思います。

これは私がワニスに置いたものです:

remove req.http.X-Forwarded-For;
set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;

これは私がhaproxyに付けたものです:

オプション forwardfor

そして、nginx で http_real_ip_module を設定しました。

set_real_ip_from 192.168.1.2; real_ip_header X-Forwarded-For;

ありがとう

PS: Varnish を削除し、ポート 80 に Haproxy を配置すると、実際の IP アドレスが得られます。

4

2 に答える 2

0

Varnish が適切なヘッダーを設定していることを確認してください。

default.vcl [1] に記載されているように、Varnish で X-Forwarded-For を設定するための実際のコードは次のようになります。

sub vcl_recv {
  if (req.restarts == 0) {
    if (req.http.x-forwarded-for) {
      set req.http.X-Forwarded-For =
          req.http.X-Forwarded-For + ", " + client.ip;
    } else {
      set req.http.X-Forwarded-For = client.ip;
    }
  }
  # ...
}

[1] https://www.varnish-cache.org/docs/3.0/reference/vcl.html#examples

于 2013-08-09T13:31:40.493 に答える