3 votos

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

He configurado mi servidor con Nginx (v= ), y cuando intento hacer una petición usando HEAD, me sale 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é ocurre con esta configuración? ¿Por qué un HEAD devuelve 404 en lugar de 200?

Gracias por la ayuda :)

2voto

raul Puntos 142

Bueno, me responderé a mí mismo.

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 contiene HEAD.

Se ha abierto un error al respecto: https://github.com/playframework/playframework/issues/2280

0voto

lapo Puntos 1471

Cuál es el punto a utilizar:

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

y por qué no éste:

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

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

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

-1voto

Jonathan Glanz Puntos 118

Para solucionar este problema, yo 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 tanto a http://postera.in Y http://www.postera.in Yo le daría una oportunidad a Curl en ambos. También le daría una oportunidad a wget o a cualquier otro rastreador Web como Lynx para notar eventualmente una diferencia. De las diferencias suele venir la definición del problema de root. De la misma causa root, la solución surge naturalmente.

Nunca supongo una causa root mientras no esté respaldada por hechos observados, cruzando en la medida de lo posible condiciones de prueba.

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X