我有一个webapp,需要身份验证才能访问它的任何页面。但是为了让我的ELB工作,我必须为ELB设置健康检查页面,以便ELB发现django app。
此页面应返回HTTP 200并且不需要auth。如何使用django / nginx world设置它。
答案 0 :(得分:2)
这是nginx更好的处理方式,因此它为django应用程序提供服务的事实应该没什么区别。
首先,您需要配置ELB的运行状况检查以ping您实例的特定网址,例如/elb-status
。您可以按照此处的说明操作:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-healthchecks.html#update-health-check-config
之后,您需要做的就是设置nginx以始终发回HTTP 200状态代码。您可以在server
中的nginx.conf
块中添加类似的内容:
location /elb-status {
access_log off;
return 200;
}
有关详细信息,请参阅此answer。
答案 1 :(得分:0)
您可以使用django-health-check
第三方应用。
使用pip安装它 -
pip install django-health-check
将URL配置为 -
urlpatterns = [
# ...
url(r'^health_check/', include('health_check.urls')),
]
并将health_check应用程序添加到INSTALLED_APPS:
INSTALLED_APPS = [
# ...
'health_check', # required
]
更多详情:https://github.com/KristianOellegaard/django-health-check
现在您可以将ELB健康检查网址确认为 - /health_check/
答案 2 :(得分:0)
@app.route('/elb-health-check')
def check_httpd_service():
server = xmlrpclib.Server('http://'+supervisor_host+':'+supervisor_rpc_port+'/RPC2')
state = server.supervisor.getProcessInfo(process)
print state['statename']
if state['statename'] == 'RUNNING':
return state['statename'], 200
else:
return state['statename'], 500
相应地定义变量。
上面的代码是一个无需身份验证即可创建自定义api的示例。它可以通过HTTP GET请求方法调用,它可以用于从ELB执行健康检查。
这只是一个例子,您可以使用您自己的想法使用flask / django为ELB创建自定义健康检查服务。
在这里,我通过主管,一个过程控制系统来控制我的应用程序。从主管我可以跟踪应用程序的状态。如果应用程序退出,Supervisor将重新加载该应用程序。
如果服务正在运行,服务器将返回200响应代码。如果服务未在主机上运行,它将返回500响应代码。根据此响应代码,我们可以在负载均衡器中路由流量。
答案 3 :(得分:0)
这是使用Django中间件的另一种解决方案。
from django.http import HttpResponse
class HealthCheckMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.path == '/health':
return HttpResponse('ok')
return self.get_response(request)
然后将您的HealthCheckMiddleware
放在settings.py
的其他中间件中
MIDDLEWARE = [
'yourdjangoapp.middleware.HealthCheckMiddleware',
......
]
只要您的应用程序正在运行,无论其进行任何配置和身份验证,您的应用程序将始终使用/health
来响应路径ok
。
答案 4 :(得分:0)
曾经遇到过同样的问题,我们最终创建了 django-heartbeat:
https://github.com/pbs/django-heartbeat
它提供了一个端点,用于确保您的应用程序正常运行。 加上一些其他有用的“检查器”,您可以立即启用它们以显示有关以下内容的信息:
https://github.com/pbs/django-heartbeat#available-checkers
如果你觉得它有用,请随意⭐它。
如果您需要任何其他功能或想要做出贡献 - 请告诉我们或直接打开 PR。
谢谢!