404 -> FastCGI

Andrew Stroganoff stroganoff at gmail.com
Fri Jul 1 11:45:02 MSD 2005


23.06.05, Igor Sysoev<is at rambler-co.ru> написал(а):
> On Thu, 23 Jun 2005, Andrew Stroganoff wrote:
> 
> > Появилась проблема, как мне кажется связанная с
> > кешированием информации о файле (fstat).
> >
> > краткое описание проблемы:
> > запрос, сервер не находит файла, отправляет запрос на fast-cgi,
> > последний создает этот файл и отправляет редирект браузеру, чтобы тот
> > еще раз запросил этот файл.
> > На это раз приходит пустой файл, хотя он совсем не пустой.
> > Если после этого нажать в браузере refresh - то выдается правильный файл.
> >
> > вот примерная схема работы:
> > 1) браузер отправляет запрос на файл
> > 2) nginx понимает, что файла нету, срабатывает error_page на новый location
> > 3) на новом location стоит fastcgi_pass
> > 4) мой модуль получает запрос, создает файл, пишет в syslog, делает
> > header("Location: /redirect/$the_same_uri");
> > 5) браузер получает ответ и идет по редиректу
> > 6) nginx получает запрос, который попадает под
> >   rewrite ^/redirect(.*)$ $1 last;
> > и отдает пустой файл, но со всеми правильными заголовками.
> >
> > Еще интересно, что толи в первый, то ли во второй запрос nginx пишет в
> > error-лог,
> > что "failed (2: No such file or directory)".
> >
> > вот конфиг:
> >
> >        location / {
> >            rewrite ^/redirect(.*)$ $1 last;
> >            index  index.html index.htm;
> >        }
> >
> >        location /data/ {
> >            error_page 404 "/generate-data/";
> >        }
> >
> >        location /generate-data/ {
> >            fastcgi_pass   localhost:1122;
> >            fastcgi_index  base.xml;
> >            fastcgi_param  REQUEST_URI      $request_uri;
> >        }
> 
> "(2: No such file or directory)" выдаётся на первый запрос.
> По идее схема должна работать. Почему выдаётся пустое тело - нужно
> делать отладочный лог.
> 
> Кстати, схему можно улучшить, используя внутрений редирект, а не внешний:
> нужно выдавать не "Location: /redirect/$the_same_uri", а
> "X-Accel-Redirect: $the_same_uri".

Эта схема работает, только вот вчера наткнулся на такую беду:
окончательный ответ сервера браузеру начинается с "HTTP/1.1 404 Not Found" :)
После этого заголовка в нормальном виде следует весь файл :)
Некоторые HTTP клиенты такого цирка не понимают :(

Что надо сделать, чтобы ответ был 200 OK ?

спасибо
андрей


More information about the nginx-ru mailing list