Re: $1 в post_action

drmarker drmarker at gmail.com
Tue May 30 16:25:46 MSD 2006


On 5/30/06, Igor Sysoev <is at rambler-co.ru> wrote:
> On Tue, 30 May 2006, drmarker wrote:
>
> > Возможна ли такая конструкция:
> >
> >   location / {
> >       rewrite '^/(token)/(.+)$'
> >           /cgi-bin/download-start.pl?to=$1&fi=$2 last;
> >
> >       post_action /cgi-bin/download-stop.pl?to=$1&bs=$body_bytes_sent;
> >   }
> >
> > Ключевое тут - использование подстановки $1в post_action.
> >
> > Если так нельзя, то как можно? Например, так?
> >
> > post_action /cgi-bin/download-stop.pl?uri=$uri&bs=$body_bytes_sent;
> >
> > ?
>
>         ...
>         post_action /cgi-bin/download-stop.pl;
>      }
>
>      location = /cgi-bin/download-stop.pl {
>         rewrite  ^   /cgi-bin/download-stop.pl?uri=$uri&bs=$body_bytes_sent?
>                      break;
>
>         proxy_pass  ...;
>      }
>

Тут задача в том, чтобы в download-stop.pl уходил token (см. мой кусок
конфига), а при предложенной тобой схеме в $uri он не попадает.

Вот конфиг полностью:

server {
    listen 80 default;

    location / {
        rewrite '^/([[:xdigit:]]{6})/(.+)$'
            /cgi-bin/download-start.pl?to=$1&fi=$2 last;
    }

    location /cgi-bin/ {
        proxy_pass http://auth:8008/cgi-bin/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /files {
        internal;

        root /srv/movdb;

        post_action /cgi-bin/download-stop.pl;
    }

    location = /cgi-bin/download-stop.pl {
        rewrite ^ /cgi-bin/download-stop.pl?uri=$uri&bs=$body_bytes_sent break;

        proxy_pass http://auth.movdb.mine.nu:8008/cgi-bin/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Мне нужно следующее:

1) пользователь запрашивает "/ffffff/file.ext"; (ffffff - пример, изменяется).
2) download-start.pl проверяет "ffffff" по базе и отдает internal redirect;
3) nginx отдает file.ext по этому редиректу;
4) после завершения сессии вызывается
download-stop.pl?to=ffffff&bs=$body_bytes_sent;

Как это сделать?

Сессии в базе учитываются по token (ffffff в примере), а не по адресу
и имени файла, например.


More information about the nginx-ru mailing list