2014-02-18 33 views
0

在Python(Django)中,我需要一种方法来检测请求的来源,传统上我使用Python来检测客户端IP,但是,在我的生产环境中,我的客户端服务器使用AWS与负载平衡器,所以我需要一种方法来检测请求从DNS来像即Python得到如何检测公共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实例吗?

+0

您已经评价过购买在AWS上的静态IP的可能性? http://aws.amazon.com/articles/1346 –

+0

将无法​​正常工作我使用负载平衡器+其他原因我的意思是我有一个IP,但它改变,所以不能用于验证。我确定有一种方法可以使用boto来验证客户端是否在同一个实例上? – Prometheus

+0

不能真正了解你的架构。如果EC2实例调用您的django服务,我没有看到负载均衡器的角色。 –

回答

2

你基本上只想要另一个EC2(你开始)联系你的服务器? 看起来你最好使用安全组。您需要创建一个安全组并阻止来自外部的所有访问。然后使用相同的安全组启动您的server-EC2和client-EC2。这可以防止所有其他访问。

在这里阅读更多: Amazon EC2的安全组 - 亚马逊弹性计算云:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html