Re: рекурсивное исполнение ssi.

Maxim Dounin mdounin на team.vega.ru
Ср Авг 18 01:10:09 MSD 2010


Hello!

On Tue, Aug 17, 2010 at 08:40:00PM +0300, Богун Дмитрий wrote:

> Здравствуйте.
> 
> Есть некий сайт, хочется настроить для него кеширование, но там есть некоторые 
> блоки которые должны "вызываться" при каждом запросе.
> 
> По идее proxy_cache + ssi должно дать желаемый результат. Но в процессе 
> настройки столкнулся со странным поведением nginx'а, которое не могу понять. 
> 
> Тех детали.
> # nginx -V
> nginx version: nginx/0.7.65
> TLS SNI support enabled
> configure arguments: --prefix=/usr --with-cc-opt=-I//usr/include --with-ld-
> opt=-L//usr/lib --conf-path=/etc/nginx/nginx.conf --http-log-
> path=/var/log/nginx/access_log --error-log-path=/var/log/nginx/error_log --
> pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx/client 
> --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-
> path=/var/tmp/nginx/fastcgi --with-http_realip_module --with-debug --with-
> http_ssl_module --with-http_stub_status_module --without-mail_imap_module --
> without-mail_pop3_module --without-mail_smtp_module
> 
> В аттаче конфиг вхоста, дебаг лог запроса и 2 php скрипта которые должны были 
> создать ответ. Вернее не весь лог, а его начало. Когда был включен дебаг, 
> запрос начал выполнятся и "залип", через несколько секунд я прибил wget, 
> потому как лог рос с очень угрожающей скоростью. Дебаг был включен только на 
> мой ip, поэтому там должен быть только один этот запрос.
> 
> Уже с выключенным дебагом тот же запрос завершился весьма быстро, его ответ 
> так же в аттаче. То что попало в лог, при обработке этого запроса.
> 
> 2010/08/17 20:15:22 [crit] 20456#0: *171052 open() 
> "/var/cache/nginx/2.somedom.net/e5d6be5a2861d96c53474f29d6a2d496" failed (24: 
> Too many open files), client: 188.163.41.29, server: 2.somedom.net, request: 
> "GET /test3.php HTTP/1.0", subrequest: "/test2.php", host: "2.somedom.net"
> 
> Aug 17 18:46:46 somedom grsec: From 188.163.41.29: denied resource overstep by 
> requesting 4096 for RLIMIT_NOFILE against limit 4096 for 
> /usr/sbin/nginx[nginx:17500] uid/euid:104/104 gid/egid:1011/1011, parent 
> /usr/sbin/nginx[nginx:17498] uid/euid:0/0 gid/egid:0/0
> 
> В обычной жизни оно и 2048 дескрипторов не переедает.
> 
> Наставьте пожалуйста на путь истинный, моя это бага или nginx'a? Даже если 
> моя, nginx ведет себя весьма не хорошо.

[...]

> 	proxy_cache_key "$host$request_uri?$args";

В /test3.php делается инклуд /test2.php, который в свою очередь 
достаётся из кеша по ключу, содержащему только $request_uri - 
оригинальный uri полученный от клиента, т.е. в данном случае 
/test3.php.  В результате имеем бесконечный рекурсивный ssi.

Защиты от рекурсии в ssi сейчас нет.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru