Der Server gibt bei der HEAD-Anforderung einen 404-Code zurück?

Der Server gibt bei der HEAD-Anforderung einen 404-Code zurück?

Ich habe meinen Server mit Nginx (v=) konfiguriert und beim Versuch, eine Anforderung mit HEAD zu stellen, erhalte ich eine 404:

curl -I http://postera.in

HTTP/1.1 404 Not Found
Server: nginx/1.2.1
Date: Thu, 19 Dec 2013 09:51:53 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1900
Connection: keep-alive

Hier ist meine Nginx-Serverkonfiguration:

server {
    listen       80;
    server_name  www.postera.in;
    return       301 $scheme://postera.in$request_uri;
}

server {
    listen       80;
    server_name  postera.in;
    access_log /var/log/nginx/postera_manager.access.log;
    error_log /var/log/nginx/postera_manager.error.log;

    location / {
        proxy_buffering    off;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Scheme $scheme;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   Host $http_host;
        proxy_pass  http://127.0.0.1:9800;
    }
}

Was ist an dieser Konfiguration falsch? Warum gibt ein HEAD 404 statt 200 zurück?

Danke für die Hilfe :)

Antwort1

Nun, ich werde diese Frage selbst beantworten.

Das Problem liegt nicht bei NGinx, sondern beim Backend, in diesem Fall bei PlayFramework, das eine 404-Fehlermeldung zurückgibt, wenn ein HEAD angefordert wird und die Routendatei keinen HEAD enthält.

Hierzu wurde ein Fehler gemeldet:https://github.com/playframework/playframework/issues/2280

Antwort2

was ist der Sinn der Verwendung von:

return       301 $scheme://postera.in$request_uri;

und warum nicht dieses:

server_name www.example.com;
   rewrite ^ http://example.com$request_uri? permanent;

Sie können die Antwort auch direkt von Backed ohne Nginx debuggen, indem Sie den folgenden Befehl von der Befehlszeile auf dem Server ausführen:

curl -I postera.in  --resolve  postera.in:9800:127.0.0.1 

Antwort3

Um ein solches Problem zu beheben, würde ich zwei Terminals auf dem Webserver öffnen, um Ihr /var/log/nginx/postera_manager.access.log und /var/log/nginx/postera_manager.error.log zu verfolgen und gleichzeitig Wireshark an beiden Enden (curl und Webserver) auszuführen.

Auch wenn der Server auf beide antwortethttp://postera.inUNDhttp://www.postera.inIch würde curl bei beiden ausprobieren. Außerdem würde ich wget oder einem anderen Webcrawler wie Lynx eine Chance geben, um eventuell einen Unterschied zu bemerken. Aus den Unterschieden ergibt sich oft die Definition des Grundproblems. Aus der eigentlichen Grundursache ergibt sich die Lösung von selbst.

Ich vermute nie eine Grundursache, solange diese nicht durch beobachtete Fakten gestützt wird und möglichst viele Testbedingungen eingehalten werden.

Ich hoffe, dass das oben Gesagte hilfreich sein kann. Mit freundlichen Grüßen, Philippe Vouters (Fontainebleau/Frankreich [fast die gesamte Karriere als Software-Ingenieur-Support])

verwandte Informationen