Nginx. Как установить пользовательскую страницу ошибок 500 при цикле get: rewrite или внутреннего перенаправления при внутреннем перенаправлении на - PullRequest
1 голос
/ 13 июля 2020

Пример nginx config /etc/nginx/conf.d/errorpagestest.conf

server {
   listen 80;
   server_name errorstage.test;
   error_log /var/log/nginx/errorstage.log warn;
   access_log /var/log/nginx/errorstage-access.log custom;

   root /var/www/errorpagestest;
   try_files $uri $uri/ /dir/index.html;

   error_page 403 /403.html;
   error_page 404 /404.html;
   error_page 500 /500.html;
   error_page 502 /502.html;
   error_page 503 /503.html;
   error_page 504 /504.html;
        }

случай 1: Если удалить / прокомментировать строку "try_files $ uri $ uri / /dir/index.html ; " и попробуйте получить любой несуществующий файл, я загружаю свой собственный файл страницы ошибок 404 / var / www/errorpagestest/404.html

, случай 2: если файл / var / www/errorpagestest/dir/index.html существует, когда я пытаюсь получить любой несуществующий файл, я получить файл загрузки / var / www/errorpagestest/dir/index.html

случай 3: если я попытаюсь получить какой-либо несуществующий файл, когда файл / var / www/errorpagestest/dir/index.html не существует, я получаю страницу ошибки nginx 500 с записью в / var / log / nginx / errorstage.log: [ошибка] 21996 # 21996: * 401019 цикл перезаписи или внутреннего перенаправления при внутреннем перенаправлении на «/dir/index.html», сервер: errorstage.test, запрос: «GET / anyfile HTTP» /1.1 ", host:" errorstage.test "

Но мне нужно получить свою пользовательскую страницу с ошибкой 500 в случае 3. Как это было решено?

1 Ответ

0 голосов
/ 13 июля 2020

Кажется, что как только Nginx достигает предела цикла перенаправления, он также прекращает обработку error_page перенаправлений.

Простейшее решение - явно вызвать ответ 500, если /dir/index.html не существует, после первая попытка.

Например:

try_files $uri $uri/ /dir/index.html =500;
...