post_action и fastcgi

Igor Sysoev is at rambler-co.ru
Wed Mar 29 16:18:02 MSD 2006


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





More information about the nginx-ru mailing list