ПРОЕКТЫ 


  АРХИВ 


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]

Работа с хедером X- Accel-Redirect (в if() )



Здравствуйте.

Задача: При попытке скачать gz файлы пропустить запрос через скрипт с проверкой прав. (Читал тут: http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/)


Есть такой конфиг

        location ~ \.php$ {
            proxy_pass   http://127.0.0.1:81;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }


location ~* ^.+\.(.*)$ {
set $t 0;
if ($http_x_accel_redirect){
        set $t 1;
                           }
if ($t != 1){
        rewrite  ^(.*)\.(gz)$  /down.php?path=$1.$2 last;
            }

root   /home/$domen/$root/www/$sub;
index  index.html index.htm;
                        }

В скрипте down.php пока что просто
<?php
$path = $_GET["path"];
header("X-Accel-Redirect:".$path);
?>

Может невнимательно читал, но по идее.
Пришел запрос на файл с расширением gz;
Хедера $http_x_accel_redirect еще не установлено, поэтому
переменную $t не устанавливаем в 1;
Если $t не установлена в 1, то делаем реврайт на down.php;
Из down.php запрос возвращается на тот же ури, но уже с установленным
$http_x_accel_redirect и посему реврайта не должно быть, а просто выдаться файл.

Вопрос: Допускается ли такая конструкция if ($http_x_accel_redirect) и что вернет при установленном и не установленном хедере?
И как отрицание в первом ифе сделать чтобы с переменной не танцевать?


По дебаг-логу видно что первый раз проходит по схеме.
После скрипта уже идет с
2007/01/25 06:18:38 [debug] 29263#0: *13 http proxy header: "X-Accel-Redirect: /qwert/nginx.tar.gz"

Дальше
2007/01/25 06:18:38 [debug] 29263#0: *13 find location for "/qwert/nginx.tar.gz"
2007/01/25 06:18:38 [debug] 29263#0: *13 find location: = "/50x.html"
2007/01/25 06:18:38 [debug] 29263#0: *13 find location: ~ "\.php$"
2007/01/25 06:18:38 [debug] 29263#0: *13 find location: ~ "^.+\.(.*)$"
2007/01/25 06:18:38 [debug] 29263#0: *13 using configuration "^.+\.(.*)$"

2007/01/25 06:18:38 [debug] 29263#0: *13 http script value: "0"
2007/01/25 06:18:38 [debug] 29263#0: *13 http script set var
2007/01/25 06:18:38 [debug] 29263#0: *13 http script var
2007/01/25 06:18:38 [debug] 29263#0: *13 http script if
2007/01/25 06:18:38 [debug] 29263#0: *13 http script if: false
2007/01/25 06:18:38 [debug] 29263#0: *13 http script var
2007/01/25 06:18:38 [debug] 29263#0: *13 http script var: "0"
2007/01/25 06:18:38 [debug] 29263#0: *13 http script value: "1"
2007/01/25 06:18:38 [debug] 29263#0: *13 http script not equal
2007/01/25 06:18:38 [debug] 29263#0: *13 http script if

Вот тут сравнение не проходит и благополучно уходит в зацикловку после которой идет на 500 ошибку.






 




Copyright © Lexa Software, 1996-2009.