我喜欢将 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 配置仅启动部分服务)以及生产。