ПРОЕКТЫ 


  АРХИВ 


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@xxxxxxxxx
  • Subject: обработка ответов бэкенда на фронтенде
  • From: Domrachev Ivan <domrachev.ivan@xxxxxxxxx>
  • Date: Wed, 27 May 2009 10:11:52 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:from:x-mailer:x-priority :message-id:to:subject:mime-version:content-type :content-transfer-encoding; bh=FrhP1mEr6o3PIMZjpiBRRwQdaifOwlUbYlfOwzJADHE=; b=V6pFVHfoTPw/AnnxqOH1uNc1udxAuEVu73ObAAoBeIn597aoOWIgktggWZj8IXnVwU Ctw9bHNBf4hWe6AGmY6hA4DXy0FZeLAtes3UWSec86+3xRCeZZHb8rZqh9nzb+HAGchk 1eRpkc2FA50v6es8Zl6zP5IJs5mJKYe9+6qG4=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:x-mailer:x-priority:message-id:to:subject:mime-version :content-type:content-transfer-encoding; b=oHPovTmfNkZ2ZY97aJB3S92PKeO0EwbMSlwUXfXF9fCmf2dwFJxhsoBQccHhkZQkM3 OASGSsqPncQC8LKibOAz36KQqeynHE/pbb1PdXXXKTs0EvMjf4KMJaIbxm5+wDmhTWbd OEnqiMMOt82RisQflHLNDsOp/mFIVXTYoXcGI=

иногда очень хочется на фронтенде что то поправить в запросах к
бэкенду, а также поменять ответ от бэкенда. рецепт как делать
манипуляции с хиадерами:

бэкенд в примере fastcgi, но может быть и любой
другой. сути это не меняет.
задача: от пользователя приходит кукис. кукис надо преобразовать и
отдать бэкенду. от бэкенда приходит ответ, в нём есть хиадер который
надо преобразовать и отдать пользователю.

frontend nginx.conf:
 ...
 perl_modules perl;
 perl_require cookies.pm;
 perl_set $header cookies::parse_cookie;
 perl_set $cookie cookies::generate_cookie;
 ....
 location / {
  fastcgi_param header_name $header;
  fastcgi_hide_header header_name;
  add_header Set-Cookie $cookie;
 }
 ....
 
cookies.pm:
 sub parse_cookie {
  ...
  return "parse_result";
 }
 sub generate_cookie {
  my $r=shift;
  my $header=$r->variable("upstream_http_header_name");
  ...
  return "name=value; expire=...";
 }

как это работает:
пользователь отправляет запрос с установленным кукисом.
nginx его ловит и перед отправкой на бэкенд выполняет fastcgi_param
header_name $header. это вызывает функцию parse_cookie которая
разрезает параметры, производит необходимые манипуляции и возвращает
необходимое бэкенду значение. nginx его передаёт в указанном параметре
header_name.
бэкенд обработав запрос, если надо, выставляет в ответе хиадер
header_name.
когда бэкенд отдаст ответ, то nginx перед отправкой пользователю
выполняет add_header Set-Cookie $cookie, что вызывает функцию
generate_cookie.
в ней мы можем получить доступ к хиадерам, что отдал бэкенд:
$r->variable("upstream_http_header_name"). обработать их и вернуть
некий результат,
который будет выставлен в ответе пользователю в хиадере Set-Cookie.
не забываем сделать fastcgi_hide_header, что бы пользователю не уходил
наш спец. хиадер.




 




Copyright © Lexa Software, 1996-2009.