ПРОЕКТЫ 


  АРХИВ 


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: fcgi cache+ssi = subrequests cycle while processing



Hello!

On Sat, Feb 23, 2013 at 10:20:03PM -0500, kanin wrote:

> Добрый день, ситуация следующая
> 
> хочу использовать SSI для подключения мелких файлов без кэша с
> X-Accel-Expires 0 
> и ловлю такую ошибку:
> 
> 2013/02/23 21:15:26 [error] 14107#0: *1 subrequests cycle while processing
> "/ssi/ssi_1.php", client: 192.168.128.1, server: deb_ww, request: "GET /
> HTTP/1.1", subrequest: "/ssi/ssi_1.php",
> host: "deb_ww"
> 
> при обращении к корню сервера индекс файл начинает сам себя инклудить много
> раз.
> вот примерный конфиг:
> 
> server {
>     listen    80;
>       server_name deb_ww;
>     root /var/www/deb_ww/public_html;
>       location = / {
>               index init.php;
>               #rewrite /                              /init.php               
>         last;
>       }
>       location ~ \.php$ {
>               ssi on;
>               charset                 utf-8;
>               fastcgi_pass    unix:/var/run/php5-fpm.sock;
>               include                 fastcgi_params;
>               fastcgi_param   SCRIPT_FILENAME         
> $document_root$fastcgi_script_name;
>               fastcgi_intercept_errors                        on;
>               internal;
>               fastcgi_cache zone;
>               #fastcgi_cache_use_stale error timeout invalid_header;
>               fastcgi_cache_use_stale off;
>               fastcgi_cache_methods GET HEAD;
>               fastcgi_pass_header "X-Accel-Expires";
>               fastcgi_cache_key       
> "$request_method|$host|$http_if_modified_since|$http_if_none_match";
>               fastcgi_ignore_headers "Cache-Control" "Expires";
>       }
> }
> 
> ошибка возникает только при включённом кэшировании, и только при указанном
> index для "=/"
> 
> location = / {
>       index init.php;
>       #rewrite /                              /init.php                       
> last;
> }
> 
> т.е. если вот здесь заменить index на rewrite, то всё отработает нормально.
> 
> далее..
> 
> в подключаемом SSI (он один) - пусто, т.е пустой файл, обычно там:
> 
> <?php header("X-Accel-Expires: 0", true);echo "helloworld"; ?>
> 
> но на пустом тоже ломается (fcgi cache чищу и т.п).
> 
> в init.php, если он полный, то браузер долго грузит и подвисает,
> но вот такой код:
> 
> <?php
> echo '<!--# include virtual="/ssi/ssi_1.php" -->';
> echo 'z';
> die;
> ?>
> 
> отрабатывает вот так:
> 
> [an error occurred while processing the directive]zzzzzzzzzzzz всего 201 раз
> буква z zzzzzzzzzzzzzz
> 
> я бы и закончил на замене index на rewrite для "=/", но хочется понять в чём
> дело, вдруг это снова где-нибудь всплывёт

У вас ключ кеширования не зависит от запрошенного ресурса, так что 
в кеше оседает вывод init.php, и дальше он же используется для 
ответа на подзапрос к /ssi/ssi_1.php.  Ну и так далее, пока nginx 
не утомится на пути познания рекурсии.

-- 
Maxim Dounin
http://nginx.com/support.html

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.