ошибка error_page + return

Igor Sysoev is at rambler-co.ru
Fri Feb 16 21:18:11 MSK 2007


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





More information about the nginx-ru mailing list