Heroku 代理从客户端到服务器的请求,因此您必须解析 X-Forwarded-For 以找到原始 IP 地址。
X-Forwarded-For 的一般格式为:
X-Forwarded-For: client1, proxy1, proxy2
在烧瓶上使用 werkzeug,我试图想出一个解决方案来访问客户端的原始 IP。
有谁知道这样做的好方法?
谢谢!
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
这就是我在 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']