请求 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 返回 404 而不是 200?

谢谢您的帮助 :)

答案1

好吧,我会自己回答这个问题。

问题不是出在 NGinx 上,而是出在后端,这里,当请求 HEAD 并且路由文件不包含 HEAD 时,PlayFramework 会返回 404。

已针对此问题打开了一个错误: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

为了解决此类问题,我会在 Web 服务器上打开两个终端来跟踪 /var/log/nginx/postera_manager.access.log 和 /var/log/nginx/postera_manager.error.log,并在两端(curl 和 Web 服务器)运行 Wireshark。

此外,服务器响应两者http://postera.inhttp://www.postera.in我会尝试在两种情况下使用 curl。此外,我也会尝试使用 wget 或任何其他 Web 爬虫程序(例如 Lynx),以最终发现差异。从差异中通常会得出根本问题的定义。从根本原因开始,解决方案自然而然地出现了。

只要没有观察到的事实支持,我从来不会假设根本原因,尽可能地测试条件。

希望以上内容能有所帮助。问候,Philippe Vouters(枫丹白露/法国[几乎所有职业都是软件工程师支持])

相关内容