Amazon ELB 的 Django ALLOWED_HOSTS

标签 django amazon-web-services

我正在使用 Django,并且我有 ALLOWED_HOSTS 设置来包含我的 EC2 的私有(private) 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。有没有办法以编程方式使其工作?我可以请求公共(public) IP 地址或设置检查 DNS 吗?

我发现 ELB 的公共(public) 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/

关于Amazon ELB 的 Django ALLOWED_HOSTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858040/

相关文章:

amazon-web-services - 为什么我的 ECS 服务无法向我的 ELB 注册可用的 EC2 实例?

Django:使 ModelForm 中的某些字段 required=False

jQuery AJAX,json数据成为Django中的关键,无法解析数据

python - Django QuerySet.exclude() : Why are all excluded?

json - 无法将请求正文解析为 json : Unexpected character (\'-\' (code 45)) AWS Lambda + API + Postman

amazon-web-services - 从SQS FIFO队列: The receipt handle has expired中删除消息

node.js - 无法使用电子邮件创建 Google Now 卡片

python - 在 Django 模板中,当键存储在变量中时,如何打印字典中的值?

django - 如何使用 uuid 作为 slug 来访问 Django UpdateView

database - SimpleDB 选择 V​​S DynamoDB 扫描