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