ПРОЕКТЫ 


  АРХИВ 


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[2]: 404 -> FastCGI



Здравствуйте, Andrew!

Friday, July 01, 2005, 11:45:02 AM, you wrote:

AS> 23.06.05, Igor Sysoev<is@xxxxxxxxxxxxx> написал(а):
>> 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".

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

AS> Что надо сделать, чтобы ответ был 200 OK ?
Не знаю, можно ли сделать
 error_page  404  =200  "/generate-data/";
достоверно знаю, что
 error_page  404  =302  "/generate-data/";
работает.

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



-- 
С уважением, Вячеслав Кокорин
Системный администратор хостинга PeterHost.Ru
Тел: (812) 34-777-43
     (095) 785-24-52
http://www.PeterHost.Ru





 




Copyright © Lexa Software, 1996-2009.