post_action и fastcgi

kirill ivanov kirill.ivanov at tel.ru
Wed Mar 29 16:02:52 MSD 2006


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

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

   Есть вопрос по поводу 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 at nthost.ru






More information about the nginx-ru mailing list