Решили добавить кэширование с помощью fastcgi, при этом куски страницы с динамическим контентом должны подгружаться с помощью ssi вставок.
SSI вставки нормально работают с обычными php скриптами (не связанными с yii), но когда хотим обратится к контроллеру и хотим включить результат его работы в код страницы, то под запросы от nginx уходят в бесконечный цикл.
Допустим делаем ssi вставку <!--#include virtual="/router/route"-->, на странице site/index.
Заходим на страницу site/index, php код выполняется и все вроде как хорошо, но когда дело доходит то включения куска страницы с помощью ssi, вместо обращения к /router/route, снова идет обращение к site/index и весь полученный html включается на место ssi вставки. В полученном html опять есть ssi кусок, когда nginx находит его снова пытается обратится к router/route, но опять обращается к site/index.
В общем все зацикливается и страница начинает включать сама себя.
Но если вместо обращения к контроллеру yii использовать обычный php файл, то весь html который он с генерирует будет включен без зацикливания.
В общем кто с таким сталкивался и есть ли уже решения данной проблемы?
Может нужно подкрутить конфиги на nginx, но вопрос в том какие именно?
yii + nginx + fastcgi + ssi
Re: yii + nginx + fastcgi + ssi
Решение найдено. При чем решение банальнее некуда.
Может кому поможет.
Необходимо вместо обращения к контроллеру в ssi вставке <!--#include virtual="/router/route"--> обращаться напрямую к index.php c параметрами запроса.
То есть было:
<!--#include virtual="/router/route"-->
Стало:
<!--#include virtual="/index.php?r=/router/route"-->
Если обращаться напрямую к index.php, nginx выполнит скрипт не взирая на настройки urlManager, которые могут в сочетании с SSI приводить к такому:
![Изображение](http://img32.imageshack.us/img32/366/us6i.png)
Может кому поможет.
Необходимо вместо обращения к контроллеру в ssi вставке <!--#include virtual="/router/route"--> обращаться напрямую к index.php c параметрами запроса.
То есть было:
<!--#include virtual="/router/route"-->
Стало:
<!--#include virtual="/index.php?r=/router/route"-->
Если обращаться напрямую к index.php, nginx выполнит скрипт не взирая на настройки urlManager, которые могут в сочетании с SSI приводить к такому:
![Изображение](http://img32.imageshack.us/img32/366/us6i.png)
- lkg0dzre
- Сообщения: 17
- Зарегистрирован: 2011.01.13, 17:21
- Откуда: Новосибирск
- Контактная информация:
Re: yii + nginx + fastcgi + ssi
Проблема с SSI в том, что в $_SERVER['REQUEST_URI'] приходит адрес исходного скрипта, а не подставляемого. Решается грязным хаком в самом начале index.php
$_SERVER['REQUEST_URI'] = $_SERVER['DOCUMENT_URI'];
if ($_SERVER['REQUEST_URI']) {
$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
$_SERVER['REQUEST_URI'] = $_SERVER['DOCUMENT_URI'];
if ($_SERVER['REQUEST_URI']) {
$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}