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 в примере), а не по адресу
и имени файла, например.