HEAD를 요청할 때 서버가 404 코드를 반환합니까?

HEAD를 요청할 때 서버가 404 코드를 반환합니까?

Nginx(v= )로 서버를 구성했으며 HEAD를 사용하여 요청하려고 하면 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

내 서버 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;
    }
}

이 구성에 어떤 문제가 있습니까? HEAD가 200 대신 404를 반환하는 이유는 무엇입니까?

도와 주셔서 감사합니다 :)

답변1

글쎄요, 그것에 대해서는 제가 직접 대답하겠습니다.

문제는 NGinx가 아니라 백엔드, 즉 HEAD가 요청되고 경로 파일에 HEAD가 포함되어 있지 않을 때 404를 반환하는 PlayFramework에서 발생합니다.

이에 대한 버그가 발생했습니다.https://github.com/playframework/playframework/issues/2280

답변2

사용할 요점은 무엇입니까?

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

그리고 이건 왜 안되죠:

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

또한 서버의 명령줄에서 다음 명령을 사용하여 nginx 없이 지원되는 응답을 직접 디버그할 수 있습니다.

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

답변3

이러한 문제를 해결하려면 웹 서버에서 두 개의 터미널을 열어 /var/log/nginx/postera_manager.access.log 및 /var/log/nginx/postera_manager.error.log를 추적하고 양쪽 끝에서 Wireshark를 실행합니다. (컬 및 웹 서버).

또한 서버가 두 가지 모두에 응답하므로http://postera.in그리고http://www.postera.in나는 컬을 둘 다 시험해 볼 것입니다. 또한 wget이나 Lynx와 같은 다른 웹 크롤러에 기회를 주어 최종적으로 차이점을 알아차릴 수도 있습니다. 차이점에서 근본 문제 정의가 나오는 경우가 많습니다. 근본 원인에서부터 해결책이 자연스럽게 나옵니다.

가능한 한 많은 테스트 조건을 넘나들며 관찰된 사실을 뒷받침하지 않는 한 근본 원인을 추측하지 않습니다.

위의 내용이 도움이 되기를 바랍니다. 감사합니다, Philippe Vouters (Fontainebleau/프랑스 [거의 모든 경력이 소프트웨어 엔지니어 지원직])

관련 정보