2017-03-10 21 views
6

Używam docker-nginx na serwerze ECS. Moja usługa Nginx zostaje nagle zatrzymana, ponieważ ścieżka proxy dla jednego z serwerów została niedostępna. Błąd jest następujący:Docker Nginx zatrzymany: [emerging] 1 # 1: host nie został znaleziony w bieżącej wersji

[emerg] 1#1: host not found in upstream "dev-example.io" in /etc/nginx/conf.d/default.conf:988 

Mój plik konfiguracyjny jest jak poniżej:

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

Mam wiele serwerów w pliku konfiguracyjnym, nawet jeśli jeden serwer był w dół, muszę mieć uruchomiony nginx. Czy jest jakiś sposób aby to naprawić?

Wszelkie sugestie dotyczące rozwiązania tego problemu byłyby mile widziane.

+0

zwykle może to być z dwóch powodów: usługa w http://dev-exapmle.io:5016/ jest wyłączona lub nie odpowiada na żądania; albo masz jakąś konfigurację selinux, która uniemożliwia nginxowi zaimportowanie żądań. Zajrzałbym do dzienników aplikacji obsługującej dev-example.io. Jeśli nic nie widzisz, jest to prawdopodobnie problem z selinux. W takim przypadku możesz rzucić okiem na tę odpowiedź: http://stackoverflow.com/questions/27435655/nginx-proxy-pass-not- working-in-selinux –

+0

@ JoséAntonioHaroPeralta dzięki za komentarz. tak, ta usługa, dev-exapmle.io:5016, jest wyłączona. Ale mam wiele innych usług w moim pliku konfiguracyjnym nginx, który działa, ale z powodu tej usługi, nginx zatrzymał się. Czy jest jakiś sposób aby to naprawić? – Matrix

+0

zawierają dyrektywę resolwera (np. Wskaż google, 8.8.8.8). Nginx rozwiąże ten problem, jeśli nie będzie mógł dotrzeć do Twojej witryny, zgodnie z odpowiedziami na następujące pytanie: http://stackoverflow.com/questions/32845674/setup-nginx-not-to-crash-if-host-in -upstream-is-not-found –

Odpowiedz

1

zawierania, aby zapobiec Nginx z upaść, jeśli witryna jest w dół, m.in. dyrektywa dotycząca przelicznika, taka jak:

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

OSTRZEŻENIE! Korzystanie z publicznego DNS stwarza ryzyko bezpieczeństwa w twoim zapleczu, ponieważ twoje żądania DNS mogą zostać sfałszowane. Jeśli jest to problem, należy wskazać przelicznik na bezpieczny serwer DNS.

+0

Dzięki. co jeśli używam resolvera 127.0.0.1? a jeśli serwer zostanie ponownie osiągnięty, czy wytyczy poprawną ścieżkę? – Matrix

2

Zazwyczaj oznacza to, że nazwa dns podana jako serwer nadrzędny nie może zostać rozstrzygnięta. Aby go przetestować, zaloguj się na serwerze nginx i spróbuj pingować dostarczony serwer i sprawdź, czy poprawne rozwiązywanie nazw zakończyło się poprawnie. Jeśli kontener dokera próbuje uzyskać docker exec -it, aby uzyskać powłokę, spróbuj pingować w górę, aby przetestować rozpoznawanie nazw. Jeśli contianer jest zatrzymany, spróbuj użyć adresu IP zamiast nazwy dns w swoim bloku serwera.

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

Można również użyć dyrektywy rozpoznawania jeśli chcesz użyć innego serwera DNS dla tej lokalizacji niż system hosta:

resolver 8.8.8.8; 
+0

Nie ma adresu IP, mam dns, który jest końcowym URL-em usługi Docker-Cloud – Matrix

+0

Wyświetl domyślny kontener konfiguracyjny nginx, a następnie spróbuj pingować dns, aby sprawdzić, czy ma miejsce rezolucja prawidłowo. –

+0

Dzięki. Następnie używam resolwera. ale jeśli używam resolvera 127.0.0.1; czy to też działa dobrze? Co się stanie, jeśli DNS zacznie działać później? Również nie musi mieć poprawnego = 30s; ? – Matrix

Powiązane problemy