Как обычно, хочется странного...
Влад Максимов
vladsm на mail.ru
Чт Дек 16 11:48:06 MSK 2010
Допустим, есть фронтенд (nginx) и есть некий бэкенд
В конфиге фронтенда что-нить в духе
location /news/ {
set $backend_content_url /backend/some/uri$uri;
rewrite ^(.*)$ /frontend/layouts/news.shtml;
}
...
location /frontend/ {
internal;
ssi on;
root /some_dir/frontend;
}
...
location /backend/ {
internal;
fastcgi_pass ......
...
вобщем, на бэкенд за контентом
}
layout_one.shtml представляет из себя что-нить в духе
<html>
<head>
..
</head>
<body>
<div class="header">
...
</div>
<div class="content">
<!--# if expr="$backend_content_url" --><!--# include virtual="$backend_content_url" --><!--# end if -->
</div>
<div class="header">
...
</div>
</body>
</html>
То есть, допустим, на фронтенде лежат лэйауты страниц, собирающие данные из разных кусочков (что-то из кеша, что-то непосредственно из бэкенда и т.п.).
И при этом возникает следующая проблема -- как реализовать "нормальную реакцию" на ошибки?
Что имеется в виду:
1. пользователь обращается по какому-то урлу (ну, скажем, посмотреть некую новость с id=125)
2. фронтенд по урлу определяет, какой именно лэйаут следует использовать для формирования страницы просмотра новости, загружает этот лэйаут (shtml) и исполняет его ssi-команды, которые "собирают" страницу из кусочков через include virtual/include file
3. пользователь видит готовую страницу
3а. НО: если новости с заданным id не существует, то хотелось бы отдать пользователю 404 или редиректнуть его куда-нибудь сообразно логике приложения
Однако, как это сделать, если о том, что "новости с таким id не существует!" знает бэкенд , и происходит это уже где-то в середине формирования страницы (то есть на этапе include virtual)?
Таким образом, имеем вопрос: можно ли каким-то образом буферизировать сборку страницы с целью проверить, не вернула ли в процессе сборки какая-то значимая её часть интересный нам код ошибки, чтобы на основании этих данных принять окончательное решение -- отдать собранный контент пользователю или же прервать "сборку страницы" и куда-нить его (пользователя) редиректнуть?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20101216/10f7b2e3/attachment-0001.html>
Подробная информация о списке рассылки nginx-ru