ПРОЕКТЫ 


  АРХИВ 


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]

post_action и fastcgi



Здравствуйте, коллеги.

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

   Есть вопрос по поводу 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-параметры..>

   При этом, похоже, даже не происходит вызова /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.

С уважением, 
Кирилл Иванов
Системный администратор отдела хостинга
--
Департамент хостинг услуг nthost.ru
Телекоммуникационная компания TEL
Tel. +7 495 787-4224
Mail. helpdesk@xxxxxxxxx




 




Copyright © Lexa Software, 1996-2009.