nginx 服务器容器中的简单健康检查端点

m19*_*19v 11 nginx docker health-check

我有一个与 nginx 服务器一起运行的 docker 容器。

我想提供一个休息接口/端点来检查服务器和容器的运行状况。例如 GET http://container.com/health/提供“true”/OK 或“false”/NOK。

最简单快捷的解决方案或最佳实践是什么?

PS 服务器充当文件浏览器,即启用目录索引列表。

dza*_*rov 33

以下配置对我的 nginx 版本有用nginx/1.14.0 (Ubuntu)::

    location = /health {
            access_log off;
            add_header 'Content-Type' 'application/json';
            return 200 '{"status":"UP"}';
    }
Run Code Online (Sandbox Code Playgroud)

要测试它:


Bio*_*yne 9

添加

server {
    // ....

    location /health {
        access_log off;
        add_header 'Content-Type' 'text/plain';
        return 200 "healthy\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

或者如果您需要 JSON 支持

server {
    // ....

    location /health {
        access_log off;
        add_header 'Content-Type' 'application/json';
        return 200 '{"status":"Healthy"}';
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:任何 200 或以上且低于 400 的状态均被视为活动/成功。所以身体本身是什么并不重要。重要的是返回的 status_code 是什么。

另外,如果您需要代理到远程后端服务。

server {
    // ....

    location / {
       proxy_pass http://backend;
       health_check interval=10 fails=3 passes=2;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样您就可以让后端服务自行处理实际的状态。因为仅仅因为容器准备好了并且 nginx 准备好了,并不总是意味着后端服务已经连接到其依赖的服务,例如数据库等。