ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[4]: динамическая обработка ошибок



Hello Alexey,

Monday, June 16, 2008, 6:44:30 PM, you wrote:


> On 16.06.2008, at 17:25, test157@xxxxxxxx wrote:

>> Hello Igor,
>>
>> Monday, June 16, 2008, 3:33:00 PM, you wrote:
>>
>>> On Mon, Jun 16, 2008 at 03:09:41PM +0300, test157@xxxxxxxx wrote:
>>
>>>> задача очень простая, все ошибки разбиты на две группы - одни
>>>> обрабатывают статически, т.е. Nginx'ом - другие передаются на  
>>>> backend
>>>> для обработки. делается все примерно так:
>>>>
>>>> error_page 501 502 503 504 507 /error/index.html;
>>>>
>>>> error_page 404 @e404;
>>>>
>>>> location @e404 {
>>>>  rewrite  .*  /e/index.php?id=404&ip=$remote_addr&uri= 
>>>> $request_uri  last;
>>>> }
>>>>
>>>> # тут статика
>>>> location /error/ {
>>>>  root /var/www;
>>>>  internal;
>>>> }
>>>>
>>>> # шлем ошибку на backend
>>>> location  /e/ {
>>>>  proxy_pass http://127.0.0.1:80;
>>>>  internal;
>>>> }
>>>>
>>>> т.е. 404 идет на обработку удаленно, все 500-ые идут локально. так
>>>> вот, все работает очень хорошо, до той поры пока живой backend - как
>>>> только 127.0.0.1 уходит в офф - начинает лезть 502-ой эррор, хотя он
>>>> переопределен вверху, на уровне сервера - однако он исчезает, если  
>>>> его
>>>> переназначить в location / - но тогда начинает лезть error 404 -  
>>>> хотя
>>>> он сам по себе определен выше работать через backend который в офе.
>>>>
>>>> суть вопроса, почему лезет 502-ой, и как избавиться от него - с  
>>>> учетом
>>>> того что сам 404 должен идти через backend.  я пробовал  
>>>> переназначать
>>>> 404-ую на статику в самом /error/ но это ничего не дало, пробовал
>>>> играться с рекурсией - тоже мимо.
>>>>
>>>> как вариант обрабатывать ошибки на самом backendе и опустить
>>>> использование rewrite_url - но не хотелось бы его озадачивать этим.
>>>>
>>>> P.S.: и еще может стоит ввести новую переменную которая будет
>>>> содержать код ошибки? или такие вещи делаются как-то иначе? а то  
>>>> чтобы
>>>> создать динамические обработки для 10 ошибок нужно сделать 10 блоков
>>>> с @ где будет только разница в коде ошибке.
>>
>>> Лучше так:
>>
>>> -    error_page 404 @e404;
>>> +    error_page 404 = @e404;
>>
>> заменил
>>
>>> Кроме того, proxy_pass можно ставить сразу в @e404:
>>
>>>     location @e404 {
>>>         proxy_pass
>>> http://127.0.0.1:80/e/index.php?id=404&ip=$remote_addr&uri=$request_uri 
>>> ;
>>>         recursive_error_pages   on;
>>>     }
>>
>>> А переход к 502 лечится "recursive_error_pages on";
> в контексте http{}/server{} указано?

указывал в контексте location, как советовал Игорь.


> а error_page-ы в каком контексте указаны?
> nginx какой версии?

также в контексте server, плюс ко всему для 502-ой ошибки пробовал их
указывать в location / и описывал поведение в этом случае. проблема в
том, что когда возникает ошибка 404 нжинкс пытается обработать ее, в
качестве обработчика стоит бякэнд, который в данный момент вызывает
ошибку 502 - и вот если 502 описана в location / то выдается
дефолтовая ошибка 404 нжинкса, а если в сервере - то также дефолтовая
502. а должна быть 502-ая переопределенная мною.

версия nginx 0.6.31-2 сбокра взята из Debian Sid, точнее исходники
взяты оттуда. 

>>>
>>
>> убрал полностью реврайт, и сделал как Вы указали один в один. все
>> работает как прежде, но поведение на 502 не изменилось (или не  
>> заметил).
>>
>> 1) если error_page 502 /error/index.html определено в сервере. то
>> ошибка выдается 502 от nginx дефолтовая.
>> 2) если error_page 502 /error/index.html определено в location / -
>> выдается ошибка 404 - также дефолтовая страничка nginx - а нужно  
>> статическую
>> error_page 502 /error/index.html, или как-то заменять 404-ую
>> дефолтовую, которая изначально через бякэнд запрашивается.
>> 3) изменения в поведении от recursive_error_pages on/off при лежащем
>> backende вобще не заметил.
>>
>> пробовал также переназначить error_page внутри @e404 также ничего не
>> помогло.
>>
>>
>>
>>
>>
>> -- 
>> Best regards,
>> Test157                            mailto:test157@xxxxxxxx
>>
>>





-- 
Best regards,
 Test157                            mailto:test157@xxxxxxxx




 




Copyright © Lexa Software, 1996-2009.