Почему proxy_intercept_errors директива Nginx требует, чтобы переписывание работало правильно?

Следующее является демонстрационной конфигурацией сервера Nginx. Без "волшебного талисмана" блок местоположения, проксированное ошибочное содержание приводит к Nginx 404 страницы, а не специализированной ошибочной подаваемой странице.

Удаление proxy_intercept_errors директивы обслуживает надлежащую проксированную ошибочную страницу с надлежащими заголовками кода ошибки HTTP.

Непроксированные ошибочные страницы представляются правильно независимо от присутствия волшебного талисмана.

Какие-либо идеи относительно того, что точно продолжается?

server {
    server_name     mydomain.com "";
    listen          80;
    root            /var/www;
    error_page      400 401 402 403 404 500 501 502 503 504 /admin/error_page.htm;
    proxy_intercept_errors on;

    location /proxy/ {
        proxy_read_timeout  60s;
        proxy_set_header    Host $host;
        proxy_pass          http://myservers;
    }

    location /test404/ {
        return 404;
    }

    location /admin/ {    # this line constitute a magical talisman that fixes proxied error interception(???)(!)
        rewrite ^(/admin)(.*)$ /admin$2 break;
    }
}
8
задан 28 May 2013 в 21:56
1 ответ

Мне очень жаль, что этот ответ срабатывает поздно, но на данный момент с текущей стабильной версией v1.8.1 предоставленная вами конфигурация должна работать без какого-либо талисмана .

Если вы указали версию, над которой вы экспериментировали, было бы неплохо проверить, исправлена ​​ли ошибка или была ли конфигурация некорректна.

Я предлагаю вам дважды проверить свою конфигурацию, так как она вам определенно не нужна это / admin / расположение и содержащаяся в нем директива rewrite . Будьте особенно внимательны при удалении всего, что не является частью этого теста (и что вы не показываете), так как это может мешать.

В крайнем случае, вы можете попробовать следующий, успешно протестированный, фрагмент конфигурации и медленно внесите изменения и посмотрите, в какой момент результаты расходятся с ожиданиями:

server {
    listen      80;
    listen      [::]:80;
    server_name example.org;

    location /proxy {
        return 418 "Host: $host, Connection: $http_connection";
    }
}

server {
    listen      80;
    listen      [::]:80;
    server_name example.com;

    root /var/ious/files;

    error_page 418 = /error_page.html;
    proxy_intercept_errors on;

    location /proxy {
        proxy_pass http://example.org;
    }
}
3
ответ дан 2 December 2019 в 23:07

Теги

Похожие вопросы