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 です。

そのためにバグが発生しました:参考:

答え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

このような問題を解決するには、Web サーバー上で 2 つのターミナルを開き、両端 (curl と Web サーバー) で Wireshark を実行するとともに、/var/log/nginx/postera_manager.access.log と /var/log/nginx/postera_manager.error.log をトレースします。

また、サーバーは両方に応答するため翻訳元:そしてhttp://www.postera.in両方で curl を試してみることをお勧めします。また、wget や Lynx などの他の Web クローラーも試して、最終的に違いに気付くようにします。違いから、多くの場合、根本的な問題の定義が生まれます。根本的な原因から、自然に解決策が生まれます。

可能な限り多くのテスト条件を横断して、観察された事実によって裏付けられない限り、根本原因を推測することは決してありません。

上記がお役に立てば幸いです。敬具、Philippe Vouters (フォンテーヌブロー/フランス [キャリアのほとんどがソフトウェア エンジニア サポート])

関連情報