ПРОЕКТЫ 


  АРХИВ 


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]

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



On 1/24/07, Alexey Polyakov <alexey.polyakov@xxxxxxxxx> wrote:
Вроде нельзя так. if ($http_x_accel_redirect) это по смыслу означает
проверку заголовка X-Accel-Redirect в запросе клиента. Ему там
неоткуда взяться.

А зачем вообще так извращаться? Есть же стандартный способ с internal.

Да вроде его я и описывал... откуда у человека выстроилась такая
жуткая схема - не представляю. :-(

Я nginx настраиваю второй раз, в общей сложности четвертый день.
Первый раз коробочного конфига хватило для одного сайта. Сейчас сложнее.
Может потому родился этот шедевр. :)

ТЗ сейчас в общем такое.
Построить бесплатный хостинг.
Спереди нгинкс отдает всю статику.
Пхп кидает на апач.
Хтмл отдается с прилепкой банера через add_after_body
Мп3-шки и прочая статическая лабуда должна пройти как на народе раньше:
Сначала страничка с банером и надписью "Вы хотите скачать файл...."
Потом переброс на файл и позволить его скачать.
Схему с интерналами я смотрел, но так понял что там ей нормально можно воспользоваться если точно в какой папке файл и описать под него локейшн с интерналом.
А тут задание 1000вирт. хостов и файл может быть где угодно.
Поэтому кроме как по расширению не придумал.
Сейчас весь конфиг выглядит так:

worker_processes  2;

events {
    worker_connections  1024;
    debug_connection ххх.ххх.ххх.ххх ;
}


http {
    include       conf/mime.types;
    default_type  application/octet-stream;

#spisok domenov
map $http_host $domen  {
hostnames ;
include conf/conf_domen/spisok.conf;
}

# spisok klientov
map $http_host $root  {
hostnames ;
include conf/conf_domen/test.com.conf;
}

#spisok subdomenov
map $http_host $sub  {
hostnames ;
include conf/conf_subdomen/test.com.conf;
}

    server {
        listen       80;
        server_name  _ *;

#igratsa s tonkoy nastroykoy posle zapuska. Ne zabit
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;
    gzip on;
    gzip_min_length  1100;
    gzip_buffers     4 8k;
    gzip_types       text/plain;
    output_buffers   1 32k;
    postpone_output  1460;
    sendfile         on;
    tcp_nopush       on;
    tcp_nodelay      on;
#   send_lowat       12000;
    keepalive_timeout  75 20;


# probros na apache
        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;
        }

#dla podstanovki bannera dla htmlek
location /footer.html{
        root /usr/local/nginx/html/banner;
                     }

#perehvat i zavorot failov s raswireniem htm na podstanovku banera
location ~* ^.+\.(html|htm)$ {
                root /home/$domen/$root/www/$sub;
                add_after_body /footer.html;
}


#vse ostalnie faili lovim kotorie v prediduwih ne slovilis
location ~* ^.+\.(.*)$ {

##############################################
#obrabativaem vsyu stati4nuyu labudu
#stavim peremennuyu chtob otpravit na baner
        
        set $t 0;

#esli eto uje ottuda vernulsa s hederom, to otme4aem eto
        if ($http_x_accel_redirect){
                set $t 1;
                                   }
#esli net otmetki, to eto noviy i rewraitim ego na script
        if ($t != 1){
#poka dlya testov tolko pod odno raswirenie. Ne zabit popravit
                rewrite  ^(.*)\.(gz)$  /down.php?path=$1.$2 last;
                    }

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

#Ne zabit pomenyat format loga. Etot dlya debuga
log_format main '$remote_addr - $remote_user $uri [$time_local] $status ''"$request" $body_bytes_sent "$http_referer" ' ' "$http_x_forwarded_for"';


        access_log  logs/access.log main;
        error_log  logs/error.log ;

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }
       # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
                         }
                }
}

Пока вот такой имею. Реализация mod_vhost конечно кривоватая, можно было просто $http_host реврайтом разбирать, но мне нужна возможность выборочно блокировать определенные поддомены чтобы они шли на дефаулт плюс парковка.
Потому так.
Если кто скажет что и как поправит и оптимизировать, тому большое спасибо, но ногами то не пинайте. Недавно я этим занялся, потому детских ляпов может быть много

./nginx -V
nginx version: nginx/0.5.7
built by gcc 4.1.1 20061011 (Red Hat 4.1.1-30)
configure arguments: --prefix=/usr/local/nginx --with-pcre=./need/pcre-7.0 --with-zlib=./need/zlib-1.2.3 --with-debug --with-http_addition_module





 




Copyright © Lexa Software, 1996-2009.