Heroku代理从客户端到服务器的请求,因此您必须解析X-Forwarded-For以查找原始IP地址。
X-Forwarded-For的一般格式是:
X-Forwarded-For: client1, proxy1, proxy2
在烧瓶上使用werkzeug,我正在尝试提供一个解决方案,以便访问客户端的原始IP。
有没有人知道这样做的好方法?
谢谢!
答案 0 :(得分: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
答案 1 :(得分: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']