nginx 400 Ungültige Anfrage (ungültiger Hostname)

nginx 400 Ungültige Anfrage (ungültiger Hostname)

Ich habe nginx als Front-End-Load-Balancer für drei Knoten einer von mir erstellten Webanwendung konfiguriert. nginx gibt ständig 400/ungültige Anfrage – ungültiger Hostname-Fehler zurück, unabhängig von den Werten, die ich in upstream.server und server.server_name verwende. Ich habe localhost und 127.0.0.1 für beide Werte ausprobiert und Anfragen mit entsprechenden cURL/Postman-Anfragen gestellt, aber ohne Erfolg.

Ich habe auch versucht, den Wert für server.server_name einschließlich der Portnummer so festzulegen, dass er besser zum eingehenden HTTP-HOST-Header passt, jedoch ohne Erfolg.

nginx.conf

events {
  worker_connections  1024; 
}

http { 
  upstream myapp {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
  }

  server {
    listen 8000;
    server_name 127.0.0.1;
    location / {
      proxy_pass http://myapp;
    }
  }
}

cURL-Anfragen führen zu Folgendem (kein Unterschied zwischen der Verwendung von localhost und 127.0.0.1).

C:\>curl -v http://127.0.0.1:8000/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 400 Bad Request
< Server: nginx/1.17.1
< Date: Mon, 22 Jul 2019 14:29:22 GMT
< Content-Type: text/html; charset=us-ascii
< Content-Length: 334
< Connection: keep-alive
<
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>
* Connection #0 to host 127.0.0.1 left intact

Antwort1

Versuchen Sie es mit dieser Konfiguration:

events {
  worker_connections  1024; 
}

http { 
  upstream myapp {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
  }

  server {
    listen 8000;
    server_name 127.0.0.1;
    location / {
      proxy_pass http://myapp;
      proxy_set_header Host $host;
    }
  }
}

Antwort2

Ich habe den gleichen Fehler erhalten, aber ichBinVerwendung von nginx vor IIS. Aber es war zeitweise. Jede zweite Anfrage schlug fehl, was seltsam war.

Es stellte sich heraus, dass ich meinen IIS-Hostnamen an eine bestimmte IP (anstatt an alle IPs) gebunden hatte und IIS zwar einen Lastenausgleich durchführte, aber die andere IP nicht auflösen konnte.

Das Problem wurde gelöst, indem IIS angewiesen wurde, sich an alle IPs zu binden. Es dauerte nur ein paar Stunden, das herauszufinden.

verwandte Informationen