簡體   English   中英

適用於Amazon ELB的Django ALLOWED_HOSTS

[英]Django ALLOWED_HOSTS for Amazon ELB

我正在使用Django,並且具有ALLOWED_HOSTS設置,以按如下方式包含EC2的私有IP:

import requests
EC2_PRIVATE_IP = None
try:
    EC2_PRIVATE_IP = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout=0.01).text
except requests.exceptions.RequestException:
    pass
if EC2_PRIVATE_IP and not DEBUG:
    ALLOWED_HOSTS.append(EC2_PRIVATE_IP)

問題是上述內容沒有考慮將請求轉發到我的EC2實例的ELB 有沒有辦法以編程方式使其工作? 我可以請求公共IP地址還是可以設置檢查DNS?

我看到ELB的公共IP地址存在此問題。

另一個簡單的解決方案是編寫一個自定義MIDDLEWARE ,它將在檢查ALLOWED_HOSTS之前將響應提供給ELB。 因此,現在您不必動態加載ALLOWED_HOSTS

中間件可以很簡單:

project/app/middleware.py

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin

class HealthCheckMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if request.META["PATH_INFO"] == "/ping/":
            return HttpResponse("pong")

settings.py

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'app.middleware.HealthCheckMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    ...
]

Django中間件參考https://docs.djangoproject.com/en/dev/topics/http/middleware/

提取AWS內部IP並添加到ALLOWED_HOST並不是最佳解決方案。 由於此提取僅在重新加載應用程序時發生。 ELB IP可以隨時更改。

取而代之的是,如果請求來自IP,我們可以在nginx中設置實際的主機頭。

信譽歸功於: https : //www.xormedia.com/django-allowed-hosts-and-amazon-elastic-load-balancer/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM