Не знаю, почему, но все мои страницы с ошибками отвечают 200. Мне это немного странно, страницы существуют, но разве они не должны иметь соответствующие коды состояния? Как заставить Nginx отображать мои страницы 404 с кодом состояния 404?
Например:
▶ curl -I http://example.com/404
HTTP/1.1 200 OK <<--------------------------- WTF! THIS SHOULD BE 404!!
Server: nginx/1.8.0
Date: Tue, 17 Apr 2018 02:24:04 GMT
Content-Type: text/html; charset=UTF-8
...
Вот соответствующая часть моей конфигурации:
server {
listen 80 default_server;
server_name example.com;
root /var/www/example/static;
index index.html;
try_files $uri $uri/ $uri.html =404;
# error pages
error_page 400 =400 /400; # bad request
error_page 401 =401 /401; # unauthorized
error_page 403 =403 /403; # forbidden
error_page 404 =404 /404; # not found
error_page 408 =408 /408; # timeout
error_page 500 502 503 504 =500 /500; # error
}
в документация это утверждает:
... можно изменить код ответа ... используя синтаксис «= ответ»
Это правда, что страница существует, но установив error_page
в конфиге должен изменить статус этой страницы. Например, если вы curl
Google 404 вы получите правильный результат:
curl -I https://www.google.com/404
HTTP/2 404 <<--------------------------- Ahhh, much better.
content-type: text/html; charset=UTF-8
referrer-policy: no-referrer
content-length: 1564
Мне нужна моя страница 404 для создания кода состояния 404, поскольку я перенаправляю на нее из других частей моего приложения. Это хорошо для людей, но плохо для машин, поскольку перенаправление дает 302, за которым следует 200 вместо 404.
Как сказано в комментарии joeqwerty, nginx - это правильно возвращает 200, потому что вы запросили документ, который существует. Вы получите 404, только если запросите документ, который не существует. Попробуйте сделать это вместо этого. (И существует ли такой документ на каком-то другом сервере, совершенно неважно.)
Настройте NGINX так, чтобы он указывал на эту страницу для подлинных ошибок 404. Как только это будет сделано, если вы захотите перенаправить свое приложение в места, просто перенаправьте их на поддельную страницу.
В предыдущем ответе это было правильно: когда вы перетаскиваете страницу 404 на ее подлинное место, она вернет 200, потому что вы запросили страницу, которая существует.