2012-02-06 8 views
5

Yüklü nginx 1.0.8 var. Burada benim sorunum var:2 dosyam var: dosya1.js ve dosya2.js. İstenen başlığı isenginx - istenilen başlığa göre yanıt

www.mysite.com/files_dir/%user%/file.js

: "X-Başlık" var ve vardır istenen yol böyle bir şeydir "OK" değeri daha sonra yanıtlanan içeriğin file1.js else file2.js olması gerekir.

Dosyalar, "html/files_dir" adresinde bulunur ve% user%, hizmetim aracılığıyla kayıtlı kullanıcı adlarını temsil eden bir dizi dizintir.

Bunu nginx'te nasıl yapılandırabilirim? Php, asp veya benzeri teknolojilerle ilgilenmiyorum, sadece nginx ile mümkün ise.

Teşekkürler

cevap

9

map başka değişkene dayalı bir değişkenin değerini tanımlamak sağlar. maphttp seviyesinde beyan edilmelidir (yani server dışından): Sonra

map $http_x_header $file_suffix { 
    default "2"; 
    OK  "1"; 
}; 

yeni değişken $file_suffix

location ~ ^(/files_dir/.+)\.js$ { 
    root html; 
    try_files $1$file_suffix.js =404; 
} 
1

Bunu çok kolayca nginx ile yapabilirsiniz. Bu örnektir:

location /files_dir/ { 

    set $file = file2.js; 
    if ($http_x_header = OK) { 
     set $file = file1.js; 
    } 
    rewrite ^(/files_dir/.*)/file.js$ $1/$file last; 

} 

Sen nginx here HTTP değişkenleri hakkında okuyabilir ve nginx yeniden yazma modülü hakkında here

+0

sayesinde kullanarak hile yapmak gerekir location aşağıdaki sen cevap da iyi ama set oldu $ dosya = dosya2.js; "=" olmadan .. sadece $ file2.js dosyasını ayarlayın; –

+2

Yerinde ifs kullanırken http://wiki.nginx.org/IfIsEvil değerini okumanızı öneririz. – MyGGaN