首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django ALLOWED_HOSTS for Amazon

Django ALLOWED_HOSTS for Amazon
EN

Stack Overflow用户
提问于 2016-03-08 02:52:11
回答 2查看 6.6K关注 0票数 16

我使用Django和ALLOWED_HOSTS设置来包含EC2的私有IP,如下所示:

代码语言:javascript
复制
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)

问题是上面没有考虑到将请求转发给我的ELB实例的EC2。是否有一种方法可以以编程方式完成该工作?我可以请求公共IP地址还是设置检查DNS?

我在ELB的公共IP地址上看到了这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-02 19:54:30

另一个简单的解决方案是编写一个自定义MIDDLEWARE,它将在检查ALLOWED_HOSTS之前给出对ALLOWED_HOSTS的响应。因此,现在不必动态加载ALLOWED_HOSTS

中间件可以非常简单,如:

project/app/middleware.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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/

票数 12
EN

Stack Overflow用户

发布于 2018-10-31 13:59:10

获取AWS内部IP并添加到ALLOWED_HOST并不是最好的解决方案。因为这个抓取只会在应用程序重新加载时发生。ELB IP可以随时改变。

相反,我们可以在nginx中设置实际的主机头,如果这是来自IP的请求。

信用额度为:https://www.xormedia.com/django-allowed-hosts-and-amazon-elastic-load-balancer/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35858040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档