尽管缺少上游,仍启动 nginx

尽管缺少上游,仍启动 nginx

我喜欢将 nginx 作为本地代理服务器运行,如果上游服务器不可用,则提供过时的缓存文件。

这种方法运行良好,但本地机器重新启动后,网络连接出现故障。在这种情况下,nginx 根本无法启动,并提示“上游未找到主机...”。

在每种情况下我都需要启动 nginx,否则当上游连接失败时,过时的缓存将无法提供。

那么如何让nginx在启动时忽略连接故障呢?

答案1

你可以设置一个upstream带有选项的服务器backup,这样就不会被正常命中。

upstream cache {
    server 192.168.1.2:8080 fail_timeout=5s max_fails=3;
    server 127.0.0.1:82 backup;
}

location / {
    proxy_pass http://cache;
    proxy_next_upstream error http_502;
}

确保您的主缓存服务器返回一致的错误,以便快速检测到故障。

答案2

一个很好的技巧(不仅适用于docker部署)在https://sandro-keil.de/blog/let-nginx-start-if-upstream-host-is-unavailable-or-down/

对 Sandro Keil 的所有赞誉 - 仅供参考 - 基本上他通过变量定义了一个具有超时和所有上游服务器的解析器:

server {
    # this is the internal Docker DNS, cache only for 30s
    resolver 127.0.0.11 valid=30s;

    location ^~ /api/ {
        # other config entries omitted for breavity

        set $upstream api.awesome.com:9000;

        # nginx will now start if host is not reachable
        fastcgi_pass    $upstream; 
        fastcgi_index   index.php;
    }
}

我将此解决方案用于本地开发(允许我使用单个 nginx 配置仅启动部分服务)以及生产。

相关内容