6

Heroku はクライアントからサーバーへのリクエストをプロキシするため、X-Forwarded-For を解析して元の IP アドレスを見つける必要があります。

X-Forwarded-For の一般的な形式は次のとおりです。

X-Forwarded-For: client1, proxy1, proxy2

フラスコで werkzeug を使用して、クライアントの元の IP にアクセスするための解決策を考え出そうとしています。

これを行う良い方法を知っている人はいますか?

ありがとうございました!

4

2 に答える 2

15

Werkzeug (および Flask) は、ヘッダーを のインスタンスに格納しますwerkzeug.datastructures.Headers。次のようなことができるはずです。

provided_ips = request.headers.getlist("X-Forwarded-For")
# The first entry in the list should be the client's IP.

代わりに、次を使用することもできますrequest.access_route(指摘してくれた @Bastian に感謝します!):

provided_ips = request.access_route
# First entry in the list is the client's IP
于 2011-11-07T17:26:13.687 に答える
2

これは私がDjangoで使用しているものです。これを参照してください https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_host

注: 少なくとも Heroku では、HTTP_X_FORWARDED_FOR は IP アドレスの配列になります。最初のものはクライアント IP で、残りはプロキシ サーバー IP です。

settings.py で:

USE_X_FORWARDED_HOST = True

あなたのviews.pyで:

if 'HTTP_X_FORWARDED_FOR' in request.META:
    ip_adds = request.META['HTTP_X_FORWARDED_FOR'].split(",")   
    ip = ip_adds[0]
else:
    ip = request.META['REMOTE_ADDR']
于 2012-03-14T06:09:51.640 に答える