ПРОЕКТЫ 


  АРХИВ 


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]

Как обычно, хочется странн ого...


  • To: nginx-ru <nginx-ru@xxxxxxxxx>
  • Subject: Как обычно, хочется странн ого...
  • From: Влад Максимов <vladsm@xxxxxxx>
  • Date: Thu, 16 Dec 2010 11:48:06 +0300
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail; h=Message-Id:Content-Type:Reply-To:Date:Mime-Version:Subject:To:From; bh=SeUg2WxAsv+oPivocJRqhzfSTYZ4nf6qHIisSx4I21I=; b=ZRN322c/0s9IztsAbSwdZ3/+cqsozo6yN52PCrK0YtBdmuLmTg4VjPTKGaWVLxt7PVC3Y3dRv6gFoBiJoKiwIqmt/PHz6JJ4RSCIbuuDXgrZF9b1q4031CdmwsOBglQX;

Допустим, есть фронтенд (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)?
Таким образом, имеем вопрос: можно ли каким-то образом буферизировать сборку страницы с целью проверить, не вернула ли в процессе сборки какая-то значимая её часть интересный нам код ошибки, чтобы на основании этих данных принять окончательное решение -- отдать собранный контент пользователю или же прервать "сборку страницы" и куда-нить его (пользователя) редиректнуть?

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


 




Copyright © Lexa Software, 1996-2009.