ПРОЕКТЫ 


  АРХИВ 


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]

Re: post_action и fastcgi



On Wed, 29 Mar 2006, kirill ivanov wrote:

  Если вдруг уже обсуждалось - прошу прощения, курил поиск по листу,
  ничего внятного по теме не нашел.

  Есть вопрос по поводу post_action. Удалось ли кому-нибудь заставить
  его работать вместе с FastCGI?

  Объясняю ситуацию: post_action используется для реализации антилича
  (один скрипт при обращении проверяет сессии и отдаёт
  x-accel-redirect, другой вызывается по post_action, проверяет, кто
  докачал файл, и выносит сессию из списка).

  Конструкция, подобная этой - не работает.

       location /files/ {
               internal;
               root /path/to/root/;
               set $orig_uri   $uri;
               set $orig_args  $args;
               set $orig_ip    $remote_addr;
               set $orig_query $query_string;
               set $orig_xforw $http_x_forwarded_for;
               post_action  /downloaded.php;
       }

       location = /downloaded.php {
               internal;
               fastcgi_param    X-Orig-X         $orig_xforw;
               fastcgi_param    Host             $host;
               fastcgi_param    X-Orig-URL       $orig_uri?$orig_args;
               fastcgi_param    X-Bytes-Sent     $body_bytes_sent;
               fastcgi_param    X-Orig-Query     $orig_query;
               fastcgi_param    X-User-IP        $orig_ip;

               fastcgi_pass unix:/path/to/socket/fcgi; # сокет
               fastcgi_index index.php;
               fastcgi_connect_timeout 0;
               fastcgi_send_timeout 300;
               <..дальше остальные fastcgi-параметры..>

"fastcgi_connect_timeout 0" означает, что nginx вообще не будет
ждать соединения.

  При этом, похоже, даже не происходит вызова /downloaded.php - в
  логах, по крайней мере, его нет ни в каком виде (даже в debug).

  Выходил из ситуации следующим образом:

       location = /downloaded.php {
               internal;
               proxy_pass  http://10.0.0.13/lost/downloaded.php;
               # 10.0.0.13 - ip, на котором слушает nginx, т.е.
               # proxy_pass делается на себя же. чуть дальше по конфигу
               # перенаправление всех php-файлов на fastcgi.

               proxy_redirect     off;
               proxy_pass_request_body  off;

               proxy_set_header  X-Orig-X       $orig_xforw;
               proxy_set_header  Host             $host;
               proxy_set_header  X-Orig-URL       $orig_uri?$orig_args;
               proxy_set_header  X-Bytes-Sent     $body_bytes_sent;
               proxy_set_header  X-Orig-Query     $orig_query;
               proxy_set_header  X-User-IP        $orig_ip;
       }

  Ровно до момента, когда обнаружил, что post_action почему-то
  вызывается не всегда (очень много жалоб на "повисшие" сессии, хотя
  в логах ничего подозрительного). И когда обнаружил, что если делать
  nginx-у рестарт или шатдаун - сессии остаются. post_action-то
  делается на себя, что бесполезно, так как сервис выключается.

  В общем - что порекомендуете на этот счет? Подкручивать /dev/hands,
  или же в консерватории что-то не так? php нужен на данном
  сервисе исключительно для того,  чтобы исполнять 2 коротких
  скрипта, и сильно не хочется для этого поднимать целый апач,
  хочется обойтись одним nginx-ом и php+fastcgi.

Нужен отладочный лог.


Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.