ПРОЕКТЫ 


  АРХИВ 


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: ошибк а error_page + return



On Fri, Feb 16, 2007 at 06:35:15PM +0100, Roxis wrote:

> location / {
>     proxy_pass http://127.0.0.1:81;
> }
> 
> location /privat {
>     return 404;
> }
> 
> GET /privat
> ...
> 
> HTTP/1.1 404 Not Found
> Server: nginx/0.5.12
> Date: Fri, 16 Feb 2007 17:27:03 GMT
> Content-Type: text/html
> Content-Length: 169
> Connection: keep-alive
> 
> до этого всё работает нормально
> а теперь добавив в http контекст
>     error_page 404 /404.htm;
> 
> GET /privat
> ...
> 
> HTTP/1.1 404 Not Found
> Date: Fri, 16 Feb 2007 17:29:03 GMT
> Content-Type: text/html; charset=iso-8859-1
> Connection: keep-alive
> Server: Apache/2.2
> Location: http://my/privat/
> Content-Length: 225
> 
> то есть запрос проходит к бакенду и в его ответе заменяется статус на 404

Во втором случае последовательность такая:

GET /privat попадает в "location /privat" и там получает код 404.
C уровня http наследуется "error_page 404 /404.htm", поэтому обработка
уходит на /404.htm, который обрабатывается в "location /" и уходит
на бэкенд. Поскольку в proxy_pass нет URI, то используется первональный
запрос - /privat. Бэкенд на него, по-видимому, возвращает редирект

301 ...
Location: http://my/privat/

в котором nginx изменяет код на 404, поскольку идёт обработка 404 ошибки
и этот ответ уходит клиенту.

Если я правильно понимаю задачу, то нужно описать

    location = /404.htm {
        ...
    }


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



 




Copyright © Lexa Software, 1996-2009.