如果未找到上游主机,则设置 nginx 不会崩溃 [英] Setup nginx not to crash if host in upstream is not found

查看:32
本文介绍了如果未找到上游主机,则设置 nginx 不会崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们在 Docker 的公共域下有几个 rails 应用程序,我们使用 nginx 将请求定向到特定应用程序.

We have several rails apps under common domain in Docker, and we use nginx to direct requests to specific apps.

our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar

配置如下:

upstream foo {
  server foo:3000;
}

upstream bar {
  server bar:3000;
}

# and about 10 more...

server {
  listen *:80 default_server;

  server_name our_dev_server.com;

  location /foo {
      # this is specific to asset management in rails dev
      rewrite ^/foo/assets(/.*)$ /assets/$1 break;
      rewrite ^/foo(/.*)$ /foo/$1 break;
      proxy_pass http://foo;
  }

  location /bar {
      rewrite ^/bar/assets(/.*)$ /assets/$1 break;
      rewrite ^/bar(/.*)$ /bar/$1 break;
      proxy_pass http://bar;
  }

  # and about 10 more...
}

如果这些应用程序之一未启动,则 nginx 将失败并停止:

If one of these apps is not started then nginx fails and stops:

host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6

我们不需要它们都启动,否则 nginx 会失败.如何让 nginx 忽略失败的上游?

We don't need them all to be up but nginx fails otherwise. How to make nginx ignore failed upstreams?

推荐答案

  1. 如果您可以使用静态 IP,那么就使用它,它会启动,如果没有响应,则返回 503.

使用 resolver 指令指向可以解析主机的内容,无论它当前是否启动.

Use the resolver directive to point to something that can resolve the host, regardless if it's currently up or not.

location层面解决,如果你不能做到上面的(这将允许Nginx启动/运行):

Resolve it at the location level, if you can't do the above (this will allow Nginx to start/run):

 location /foo {
   resolver 127.0.0.1 valid=30s;
   # or some other DNS (your company's internal DNS server)
   #resolver 8.8.8.8 valid=30s;
   set $upstream_foo foo;
   proxy_pass http://$upstream_foo:80;
 }

 location /bar {
   resolver 127.0.0.1 valid=30s;
   # or some other DNS (your company's internal DNS server)
   #resolver 8.8.8.8 valid=30s;
   set $upstream_bar foo;
   proxy_pass http://$upstream_bar:80;
 }

这篇关于如果未找到上游主机,则设置 nginx 不会崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆