Обработать http статус с backend'а

Igor Sysoev is at rambler-co.ru
Wed Jun 17 23:03:48 MSD 2009


On Wed, Jun 17, 2009 at 10:30:06PM +0400, Alexey V. Karagodov wrote:

> 
> On 17.06.2009, at 21:36, Олег Петрачёв wrote:
> 
> >День добрый,
> >
> >>>статусах. Например, при 503 показать специальную страничку  
> >>>nginx'ом, а
> >>>при всех остальных спроксировать, что отдал backend.
> >>Как раз proxy_intercept_errors и нужно.
> >перенаправлять их на обработку nginx'у с помощью директивы error_page.
> >
> >Ага, спасибо, осознал. Но теперь хочется странного: чтобы эти страницы
> >ошибок были видны только при внутренних редиректах. Знаю, что есть
> >internal, но он при попытке обратиться к location отдаёт 404. А нужно
> >другое: если запрос к странице ошибок вызван внутренним редиректом
> >(например, через error_page), то отдавать её, а если не внутренним, то
> >проксировать к backend'у.
> >
> >Если сделать
> >
> >location / {
> >proxy_intercept_errors on;
> >error_page 503 /503.html;
> >proxy_pass http://127.0.0.1;
> >}
> >
> - location /503.html {
> + location @503.html {

Тут проблема в том, что при перенапралении в @... URI не меняется.
То есть, nginx будет пытаться открыть локальный файл типа /чего-то.php
и, может, даже откроет и отдаст как статику.

> >root /var/www/errors;
> >}
> >
> >то при обращении снаружи к /503.html увидим нашу страницу ошибок, а
> >запрос к бэкэнду спроксирован не будет.
> >
> >Хотелось бы как-нибудь так:
> >
> >location /503.html {
> >if (!$internal) {
> > proxy_pass http://127.0.0.1;
> >}
> >}
> >
> >Это как-нибудь возможно реализовать? В переменных в документации не
> >вижу, за что там можно было бы зацепиться...
> >
> >--
> >// cronfy
> 

-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list