Docker Nginx停止了:[emerg] 1#1:在上游

时间:2017-03-10 14:22:47

标签: nginx docker amazon-ecs

我在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

我的配置文件如下:

 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;
   }
}

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

任何解决此问题的建议都将受到赞赏。

3 个答案:

答案 0 :(得分:5)

如果您的网站已关闭,请包含以防止Nginx崩溃,请包含解析程序指令,如下所示:

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

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

答案 1 :(得分:3)

这通常意味着您作为上游服务器提供的DNS名称无法解析。要测试它,请登录nginx服务器并尝试ping所提供的上游服务器并查看名称解析是否正确完成,如果它的docker容器尝试docker exec -it获取shell,则尝试ping上游以测试名称解析。如果contianer已停止,请尝试在服务器块中使用IP地址而不是dns名称。

proxy_pass         http://<IP ADDRESS>:5016/;

如果要为此位置使用不同的dns服务器而不是主机系统,也可以使用解析器指令:

resolver 8.8.8.8;

答案 2 :(得分:0)

使用 nginx plus 时,您也可以通过在上游添加一个区域来解决这个问题。在您的代理通行证中使用此测试时。当服务器 some-server 开始解析时,它将开始将流量传递给它。

确保如上所述,在配置的其他部分放置解析器。对于码头工人,我使用 解析器 127.0.0.11 有效 = 1s;

upstream test {
        zone test-zone 64k;
        server some-server:1234 resolve;
}