[英]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.