У меня есть конфигурация, в которой я хочу вернуть пользовательскую ошибку из названного местоположения. Однако вместо этого я получаю стандартную страницу ошибки nginx. Я могу получить пользовательскую ошибку из неназванного местоположения.
Чтобы воспроизвести проблему, я создал эту простую установку на основе docker:
Dockerfile:
FROM nginx:1.17.9
COPY default.conf /etc/nginx/conf.d/default.conf
COPY 404.html /usr/share/nginx/html/404.html
default.conf:
server {
listen 80;
server_name localhost;
#recursive_error_pages on;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
# used in a more complex setup, this is just a minimal config
# # See http://stackoverflow.com/a/20694873
error_page 404 = @fwd;
return 404;
}
location @fwd {
root /usr/share/nginx;
error_page 404 /404.html;
}
}
50-кратные ошибки здесь не интересны, я адаптировал конфигурацию из nginx docker образа.
Использование чего-либо кроме 404 для перенаправления в указанное местоположение не имеет значения.
404. html:
<!DOCTYPE html>
<html>
<head><title>404</title></head>
<body>
my 404
</body>
</html>
Сборка: docker build -t mynginx .
и начало docker run --rm -p 8080:80 --name mynginx mynginx
.
Теперь указав браузеру на http://localhost: 8080 / index. html должно вернуть стандартную страницу приветствия, тогда как http://localhost: 8080 / не существует. html вернет внутреннюю страницу nginx 404, а не пользовательскую, которую я настроил.
Есть ли способ фактически заставить эту работу работать в указанном месте?