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