特定のケースでワニスが中間プロキシ IP またはパブリック IP を送信しないという問題に直面しています。シナリオは次のとおりです。
一部のホテル/会社では squid プロキシが構成されており、インターネットのすべてのトラフィックが Squid 経由でルーティングされます。
私の会社のサイトにアクセスするユーザーは、最初にロード バランサーにアクセスし、次に Varnish、次に Apache にアクセスします
- Apache は mod_geoip で構成されています。私のサイトのコードは、IP アドレスに基づいて国のリダイレクトを行います。
問題 :
- ユーザー (その squid プロキシの背後) がロード バランサーの背後にある私の会社の Web サイトにアクセスする場合 -> VARNISH -> Apache - ここで、Apache は内部 IP (彼のプライベート IP) とロード バランサーの内部 IP のみを X-forwarded-for として取得するため、IP ベースリダイレクト失敗!
Apache ログ (X-Forwarded-IP をログに記録するように構成) では、ユーザーのプライベート IP と、次にマイ ロード バランサーのプライベート IP が表示されます。
172.10.5.10、LoadBalancerIP - - [.......]
- 同じユーザーが Varnish を持たない別のサイトにアクセスすると、Load Balancer -> Apache にヒットします。ここで、apache はユーザーのプライベート IP とユーザーのパブリック IP を X-forwarded-for として取得し、IP ベースの国のリダイレクトは正常に機能します。
Apache ログ (X-Forwarded-IP をログに記録するように構成されています) では、ユーザーのプライベート IP と彼のパブリック IP もログに記録されていることがわかります。
172.10.5.10、PublicIP - - [.......]
私のワニス構成は以下の通りです。
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;
}
}
PS: 見つけたすべてのリンクを既に Google で検索しており、すべてのリンクから次の Varnish Config が得られます
今のところ、この問題を解決するには、ワニスをバイパスする必要があり、ウェブサイトのトラフィックが Apache に直接ヒットするようになりましたが、キャッシュと高速配信からサーバー コンテンツにワニスを戻す必要があります。
誰かがこの問題を解決する方法を教えてくれれば幸いです。
ありがとう!