【发布时间】:2022-02-08 03:32:16
【问题描述】:
我有 Nginx 作为反向代理和 Django 应用程序在它后面工作。 Django 应用通过 UWSGI 连接到 Nginx。 Django 应用程序是使用 Docker 部署的,并且在部署过程中会停机一秒钟左右。我想指示 Nginx 在此期间返回自定义 503 错误页面。
下面是我的 Nginx 配置:
upstream server_django {
server 0.0.0.0:8000;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name server.com;
location / {
# required to serve static assets
alias /data/server.com/website_root/;
try_files $uri @django;
}
location @django {
uwsgi_pass server_django;
include /etc/nginx/uwsgi_params;
}
}
我尝试在“服务器”块中添加以下配置:
uwsgi_intercept_errors on;
error_page 502 503 504 =503 @django_is_down;
location @django_is_down {
root /error_pages/server.com/;
add_header Retry-After 10 always;
index 503.html;
}
但它没有帮助,因为 Nginx 在后端关闭时盯着默认的 404 页面。
如何检测 Django 何时在 Nginx 中关闭并在发生这种情况时提供自定义错误页面?
【问题讨论】:
-
您的
@django_is_down位置使用了原始请求 URI,并且您的 404 错误表明它既找不到$uri也找不到$uri/503.html。你可以试试location @django_is_down { root /error_pages/server.com; add_header Retry-After 10 always; rewrite ^ /503.html break; } -
你想让 Django 处理错误并提供错误页面吗?还是在出错时提供静态 HTML?
-
@Mtxz 我希望 Nginx 在 Django 后端关闭时提供静态预定义 503 错误页面(它在部署时发生)
-
你确定Dango在部署时发回的HTTP代码吗?
-
@Mtxz 我确信 Django 在大约 3 秒的时间间隔内根本不会回复任何 HTTP 代码。这意味着 Django 处于“关闭”状态,根本无法响应。我希望 NGINX 检测到这种情况并使用自定义 503 错误页面进行响应
标签: nginx nginx-reverse-proxy nginx-config