Сервер возвращает код 404 при запросе HEAD?

Сервер возвращает код 404 при запросе HEAD?

Я настроил свой сервер с 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, а в бэкэнде, в данном случае PlayFramework, который возвращает 404 при запросе HEAD, а файлы маршрутов не содержат HEAD.

Для этого был открыт баг: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 на обоих концах (curl и веб-сервер).

Также, поскольку сервер отвечает на обаhttp://postera.inИhttp://www.postera.inЯ бы попробовал curl на обоих. Также я бы дал шанс wget или любому другому веб-сканеру, такому как Lynx, в конце концов заметить разницу. Из различий часто вытекает определение корневой проблемы. Из самой корневой причины решение приходит само собой.

Я никогда не предполагаю первопричину, пока она не подкреплена наблюдаемыми фактами, пересекающими как можно больше тестовых условий.

В надежде, что вышеизложенное поможет. С уважением, Филипп Воутерс (Фонтенбло/Франция [почти вся карьера в качестве инженера-программиста])

Связанный контент