2014-02-18 79 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