11

そのため、静的メディアと負荷分散用のnginxとdjango用のWebサーバーとしてのtornado(4台のサーバーが実行中)を使用した簡単なセットアップを取得しました。私の問題は、remote_addr が django に渡されないため、KeyError が発生します。

article.ip = request.META['REMOTE_ADDR']

nginx.conf のおかげで、リモート アドレスは X-Real-IP (HTTP_X_REAL_IP) として送信されます。

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect false;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://frontends;
    }

HTTP が META キーの先頭に追加されるため、proxy_set_header remote_addr $remote_addr を実行することはできません。リモート アドレス キーが見つからない場合は、X-Real-IP を読み取ることができますが、よりスマートなソリューションがあるかどうか知りたいです。

ありがとう!

4

6 に答える 6

17

これが私が問題を解決した方法です。このミドルウェアを使用することにより:

class SetRemoteAddrMiddleware(object):
    def process_request(self, request):
        if not request.META.has_key('REMOTE_ADDR'):
            try:
                request.META['REMOTE_ADDR'] = request.META['HTTP_X_REAL_IP']
            except:
                request.META['REMOTE_ADDR'] = '1.1.1.1' # This will place a valid IP in REMOTE_ADDR but this shouldn't happen

お役に立てば幸いです。

于 2010-03-11T13:29:21.160 に答える
5

「fastcgi_param REMOTE_ADDR $remote_addr;」を追加 nginx.conf ファイルに:

    location / {
    # host and port to fastcgi server
    fastcgi_pass 127.0.0.1:8801;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_pass_header Authorization;
    fastcgi_intercept_errors off;
    ...
    # Add this line!
    fastcgi_param REMOTE_ADDR $remote_addr;
    ...
}

出典:djangoのnginx仮想サーバー+ fcgiの方法は?

于 2011-02-22T22:23:45.740 に答える
5

私は同様の設定をしています。nginx を apache の前に置いた後、apache ログの IP が常に 127.0.0.1 であることに気付きました。「libapache2-mod-rpaf」をインストールすると修正されたようです。あなたの問題が関連しているかどうかはわかりません。

于 2009-10-30T03:07:16.640 に答える
2

いいえ、remote_addr を渡すことはできません。したがって、私が知っている唯一の解決策は、X-Real-IP または X-Forwarded-For を使用し、バックエンドがこれらを正しく処理することを確認することです。

編集:これは、通常のnginx proxy_passではなく、fastcgi_passに適用されます

于 2009-11-03T08:04:58.660 に答える