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 回答