2016-04-30 6 views
1

私のサーバーは、複数のWebサイトなどのApache、PHP、のApache + Pythonのボトル:ビジターIPは常に127.0.0.1を指し

しかし、そのうちの一つ(www.mywebsite.com)とそれらのほとんどがリスニングPythonのWebサーバを使用していますを扱いますポート8092.上でこのように、このApacheの設定:インターネットからのユーザーは、www.mywebsite.comに接続したときに

<VirtualHost *:80> 
    ServerName mywebsite.com 
    ServerAlias *.mywebsite.com 
    RewriteEngine On 
    RewriteRule /(.*)   http://localhost:8092/$1 [P,L] 
</VirtualHost> 

は今、それが動作します:Pythonはそれを処理し、すべてが大丈夫です。

問題:私はbottleを使用して、私のPythonコードでは、取得IP:

ip = request.environ.get('REMOTE_ADDR') 

は常に 127.0.0.1です。

訪問者の実際のIPアドレスを取得するにはどうすればよいですか?

答えて

2

仮想ホストはproxy rewritingを使用しています。クライアントは、アプリケーションへのプロキシ接続を開き、URLを書き換えて、リクエストをプロキシするapacheに接続します。アプリケーションとクライアントの間に実際の接続はありません。

アプリケーションとクライアントの間に直接の接続がないため、アプリケーションに送信するようにApacheに指示しない限り、「実際のIP」を取得することはできません。通常の方法は、X-Forwarded-Forヘッダーのようなものを設定することです。これを行うには、明示的にmod_proxyを使用する必要があります。

+0

あなたが正しいです、 'request.environ.get( 'HTTP_X_FORWARDED_FOR')'はうまくいきます。 – Basj

関連する問題