KVI*_*ISH 6 django amazon-web-services
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
问题是上面没有考虑ELB
将请求转发给我的EC2
实例的问题.有没有办法以编程方式完成这项工作?我可以请求公共IP地址,还是设置检查DNS?
我在ELB的公共IP地址上看到了这个问题.
小智 9
另一个简单的解决方案是编写自定义 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")
Run Code Online (Sandbox Code Playgroud)
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',
...
]
Run Code Online (Sandbox Code Playgroud)
Django 中间件参考https://docs.djangoproject.com/en/dev/topics/http/middleware/
归档时间: |
|
查看次数: |
2145 次 |
最近记录: |