我正在使用 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/