Возврат пользовательской ошибки nginx из указанного местоположения - PullRequest
0 голосов
/ 23 марта 2020

У меня есть конфигурация, в которой я хочу вернуть пользовательскую ошибку из названного местоположения. Однако вместо этого я получаю стандартную страницу ошибки 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, а не пользовательскую, которую я настроил.

Есть ли способ фактически заставить эту работу работать в указанном месте?

1 Ответ

0 голосов
/ 24 марта 2020

Исследуя проблему, я узнал о recursive_error_pages on; - но тупо оставил ее прокомментированной. Естественно, это не помогло.

Без комментариев эта директива устраняет проблему!

...