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