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])