Docker Nginx停止了:[emerg] 1#1:在上游找不到主机

Mat*_*rix 19 nginx amazon-ecs docker

我在ECS服务器上运行docker-nginx.我的nginx服务突然停止,因为其中一个服务器的proxy_path无法访问.错误如下:

[emerg] 1#1: host not found in upstream "dev-example.io" in /etc/nginx/conf.d/default.conf:988
Run Code Online (Sandbox Code Playgroud)

我的配置文件如下:

 server {
       listen      80;
       server_name     test.com;
       location / {
          proxy_pass         http://dev-exapmle.io:5016/;
          proxy_redirect     off;

          ##proxy_set_header   Host             $host;
          proxy_set_header   X-Real-IP        $remote_addr;
          proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

          client_max_body_size       10m;
          client_body_buffer_size    128k;

          proxy_connect_timeout      90;
          proxy_send_timeout         90;
          proxy_read_timeout         90;

          proxy_buffer_size          4k;
          proxy_buffers              4 32k;
          proxy_busy_buffers_size    64k;
          proxy_temp_file_write_size 64k;
       }
}

server {
   listen       80 default_server;
   server_name  localhost;

   #charset koi8-r;
   #access_log  /var/log/nginx/log/host.access.log  main;

   location / {
      root   /usr/share/nginx/html;
      index  index.html index.htm;
   }

   #error_page  404              /404.html;

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
      root   /usr/share/nginx/html;
   }
}
Run Code Online (Sandbox Code Playgroud)

我在配置文件中有很多服务器,即使一台服务器出现故障,我也需要运行nginx.有没有办法解决它?

任何解决此问题的建议都将不胜感激.

Dam*_*ien 10

就我而言,仅添加解析器并不能解决问题。但是我可以通过为主机使用变量来解决它。另外,我想使用127.0.0.11(这是固定IP)的Docker DNS更有意义。

例:

server {
  listen 80;
  server_name test.com;

  location / {
    resolver 127.0.0.11;
    set example dev-example.io:5016
    proxy_pass http://$example;
  }
}
Run Code Online (Sandbox Code Playgroud)

我在此页面上找到了变通方法。

  • 正确的语法是:`set $ example“ dev-example.io:5016";``proxy_pass http:// $ example;` (6认同)
  • @jozo 没有帮助,在我的设置中返回 502 。 (6认同)
  • 效果很好。使用Docker的情况下: 1) `echo "resolver 127.0.0.11 valid=60s;" > ./conf.d/resolvers.conf` 2) docker-compose.yml: `卷: - ./conf.d/resolvers.conf:/etc/nginx/conf.d/resolvers.conf` (2认同)

Jos*_*lta 6

如果您的站点已关闭,请包括防止Nginx崩溃,包括解析器指令,如下所示:

 server {
       listen      80;
       server_name     test.com;
       location / {
          resolver 8.8.8.8
          proxy_pass         http://dev-exapmle.io:5016/;
          proxy_redirect     off;
 ...
Run Code Online (Sandbox Code Playgroud)

警告!使用公共DNS会在后端造成安全风险,因为您的DNS请求可能会被欺骗.如果这是一个问题,您应该将解析器指向安全的DNS服务器.

  • 对于像我这样的复制粘贴者来说,缺少分号解析器 8.8.8.8; (3认同)
  • 您好,大概这只是添加了另一个 DNS 解析端点。就我而言,DNS 地址已被删除,并且无法在任何地方解析。有没有办法让 nginx 简单地将页面视为已关闭而不是使整个实例崩溃? (2认同)