2012-04-05 3 views
6

ApacheでVarnish 3を設定していて、問題なく動作しています。しかし、私はクライアントIPをApacheログに記録することができません。私はいくつかのソリューションを運のない周りにグーグルで試してみました。今、私のApacheアクセスログファイルは、クライアントIPアドレスの代わりにサーバーIPを記録しています。ここでクライアントIPがApacheログにログインしていない

はあなたの親切な配慮のための私の設定です:

ワニスVCL:(/etc/varnish/default.vlc):http://pastebin.com/PuBqZ6fx

Apacheのコンフィグ

は/ etc/httpdの/ confに/ httpdの.conf

LogFormat "%{X転送する}"%l%u%t \ "%r \"%s \ "%Referer} \" \ "%{ユーザーエージェント}私は "varnishcombined

Apacheバーチャルホスト

......他のスタッフ..... のErrorLogログ/ FR-エラーログ のCustomLogログ/ FR-カスタムログがvarnishcombined ......その他の項目.....

注:インストールニスバージョンはワニス3.0.2-1.el5.x86_64

おかげです。 Raheel

答えて

12

私はあなたがあなたのペーストビンの例では、作業の設定を持っていたと思いますが、これは実際にトリックを行う必要があります。

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

あなたvcl_recvで{}。

+0

上記のコードのコメントを外すと、$ _SERVER ["HTTP_X_FORWARDED_FOR"]に実際のクライアントIPアドレスが表示されますが、$ _SERVER ["REMOTE_ADDR"]は引き続きサーバーのIPアドレスを表示します。さらに、Apacheアクセスログファイルには依然として各要求のサーバーIPが表示されます。すべての手がかりは? –

+0

私は解決策を見つけた後、RPAF Apache Moduleです。 http://www.amgeekblog.com/mod_rpaf-in-ubuntu-and-centos/。このモジュールを使用した後、私はApache Log FileとPHPの$ _SERVER ['REMOTE_ADDR']グローバル変数に適切なクライアントIPアドレスを取得します。ありがとう! –

+1

クライアントIPが最初に来るべきではありませんか? (すなわち、 'client.ip +"、 "+ req.http.X-Forwarded-For') –

9

は、その後のコメントで述べたOPとしてあなたのVirtualHost

<VirtualHost *:8080> 
    ServerName www.abc.com 

    CustomLog /var/log/httpd/www.abc.com/access.log varnishcombined 

</VirtualHost> 
+0

これは私にとって完璧に働いてくれてありがとう。 – stedotmartin

10

でapacheの

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined 

そして今のLOGFORMATを変更するあなたのVCLに

sub vcl_recv { 
    # Add a unique header containing the client address 
    remove req.http.X-Forwarded-For; 
    set req.http.X-Forwarded-For = client.ip; 

} 

を次の行を追加し、ソリューションはApacheモジュールです。 VarnishはデフォルトでX-Forwarded-Forヘッダーを追加します。

mod_rpaf(Apache 2.2)またはmod_remoteip(Apache 2.4)のようなApacheモジュールは、remote_ipの値をX-Forwarded-Forヘッダーで渡された値に設定します。

これは、単純にX-Forwarded-Forヘッダーの値をあなたのApacheログに記録するよりはるかに堅牢なソリューションを提供します。たとえば、ワニスまたは直接経由で2つのIPで同じサイトにアクセスすることができます。また、サイト機能は期待通りに機能し、正しくログされます。

+0

誰かがmod_remoteipで成功しましたか?私はApache 2.4.7 + Varnish 4.0.1で動作させることができませんでしたが、他に誰かが見つかりませんでした。 – curiouser

+0

興味のある方は、mod_remoteipを動作させることができました。私はここに投稿:http://stackoverflow.com/questions/25455731/getting-apache-2-4-access-logs-to-show-client-ip-instead-of-127-0-0-1-with - ヴァルニ – curiouser

関連する問題