¿El servidor devuelve un código 404 al solicitar HEAD?

¿El servidor devuelve un código 404 al solicitar HEAD?

Configuré mi servidor con Nginx (v=), y cuando intento realizar una solicitud usando HEAD, obtengo un 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

Aquí está la configuración de mi servidor Nginx:

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

¿Qué hay de malo en esta configuración? ¿Por qué HEAD devuelve 404 en lugar de 200?

Gracias por la ayuda :)

Respuesta1

Bueno, me responderé a eso.

El problema no es de NGinx sino del backend, aquí, PlayFramework que devuelve un 404 cuando se solicita un HEAD y los archivos de rutas no contienen HEAD.

Se ha abierto un error por eso:https://github.com/playframework/playframework/issues/2280

Respuesta2

¿Cuál es el punto de usar?

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

y por qué no este:

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

También puede depurar la respuesta directamente desde el respaldo sin nginx mediante el siguiente comando desde la línea de comando en el servidor:

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

Respuesta3

Para solucionar un problema de este tipo, abriría dos terminales en el servidor web para rastrear su /var/log/nginx/postera_manager.access.log y /var/log/nginx/postera_manager.error.log junto con la ejecución de Wireshark en ambos extremos. (curl y servidor web).

Además, como el servidor responde a amboshttp://postera.inYhttp://www.postera.inLe daría una oportunidad a curl con ambos. Además, también le daría a wget o a cualquier otro rastreador web, como Lynx, la oportunidad de notar una diferencia. De las diferencias surge a menudo la definición del problema raíz. Desde la raíz misma, la solución surge de forma natural.

Nunca supongo una causa raíz mientras no esté respaldada por hechos observados, cruzando la mayor cantidad posible de condiciones de prueba.

Con la esperanza de que lo anterior pueda ayudar. Saludos, Philippe Vouters (Fontainebleau/Francia [casi toda su carrera como ingeniero de software])

información relacionada