У меня есть опыт работы только с апстримами в Nginx, а не с обслуживанием статических файлов.
Nginx имеет сервер по умолчанию, который обслуживает Добро пожаловать в Nginx! страница и отображается, когда на виртуальных хостах нет совпадений. Я хотел бы сохранить эту страницу по умолчанию, но переопределить 200 код состояния для 404.
Я не знаю, как это сделать. Любые идеи?
Вы можете вернуть страницу с кодом ошибки, используя
error_page 404 /index.html;
Так долго как root
определен в вашем блоке сервера как путь по умолчанию для nginx. Nginx.org имеет обширная документация обо всем этом, что стоит проверить.
Опасный. Однако вы можете использовать return
чтобы отвечать запросами в любое другое место на вашем сервере, что правильно вызовет директиву error_page. Если вы поместите это в нижнюю часть своего серверного блока, он будет служить уловкой для запросов, не указанных в другом месте:
location / {
return 404;
}
Вот документы для return
.
Чтобы быть по-настоящему педантичным, вы также можете опустить директиву error_page и просто написать вместо нее URL-адрес перенаправления (для кодов 301, 302, 303, 307 и 308, начиная с версии 0.8.42):
location / {
root /path/to/www/nginx;
index index.html;
return 301;
}
Или основной текст ответа (для других кодов):
location / {
root /path/to/www/nginx;
return 404 '404 error';
}
... но это может оказаться трудным для устранения неполадок, если что-то пойдет не так.
Nginx имеет довольно простой синтаксис для разделения кодов состояния и страниц. В пределах server
блок, вы можете определить root
где nginx будет искать запрошенные статические страницы. Когда статическая страница запрошена и не найдена, не может быть прочитана или происходит что-то еще, nginx получает код состояния и выполняет действие. Если этот код равен 200, он обрабатывает html, php или что-то еще, что может (и часто делает) запускать серию запросов к файловой системе или другому сокету, чтобы предоставить ту или иную часть вашей страницы. Результаты в случае успеха отправляются просматривающему клиенту, а в случае ошибки возвращается страница по умолчанию для ошибки. В обоих случаях также возвращается код состояния (позволяющий настроить 404 на стороне браузера и другие ошибки).
В error_page
Директива просто сообщает nginx, какой запрос выполнять дальше. На практике этот запрос даже не обязательно должен быть файлом на диске. Это может быть названный location
со своим набором правил. Конфигурация по умолчанию для nginx хорошо это иллюстрирует:
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
Таким образом, при получении 503 nginx запросит /50x.html, а оператор местоположения для любого запроса к 50x.html определяет корневой путь для поиска этого файла.