404 -> FastCGI
Vyacheslav Kokorin
slava at peterhost.ru
Fri Jul 1 12:26:35 MSD 2005
Здравствуйте, Andrew!
Friday, July 01, 2005, 11:45:02 AM, you wrote:
AS> 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".
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
More information about the nginx-ru
mailing list