【发布时间】:2014-02-18 20:28:34
【问题描述】:
在 Python (Django) 中,我需要一种方法来检测请求的来源,传统上我使用 Python 来检测客户端 IP,但是,在我的生产中,我的客户端服务器使用 AWS 和负载均衡器,所以我需要一种方法来检测请求来自 DNS,例如
公共 DNS:ec2-11-11-11-48.eu-north-2.compute.amazonaws.com
有没有办法从客户端检测服务器的公共 DNS,即对于 IP 我这样做:
def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
class IpAuthentication(Authentication):
def is_authenticated(self, request, **kwargs):
return get_client_ip(request) in SETTINGS.ALLOWED_IPS:
所以我要问的是:有没有办法确保我的客户请求来自特定的 AWS 实例?
【问题讨论】:
-
您是否评估过在 AWS 上购买静态 IP 的可能性? aws.amazon.com/articles/1346
-
不起作用我使用负载均衡器 + 其他原因,我的意思是我确实有一个 IP,但它发生了变化,因此不能用于验证。我确定有一种方法可以验证客户端是否在同一个实例上,也许可以使用 boto?
-
无法真正理解您的架构。如果 EC2 实例正在调用您的 django 服务,我看不到负载均衡器的作用。
-
抱歉,EC2 正在调用该服务。 API 和客户端在同一台服务器上。我想验证客户端请求来自同一个 IP/域。设置。客户端 > 负载均衡器 > ec2 实例。但我需要确保客户端是从 ec2 实例之一进行调用的。
标签: python django amazon-web-services amazon-ec2