2012-02-06 61 views
5

我安裝了nginx 1.0.8。 這裏是我的問題: 我有2個文件:file1.jsfile2.js。所請求的路徑是這樣的:nginx - 基於請求頭的響應

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

如果請求的標題: 「X標頭」 存在,並且有值「OK」,那麼響應的內容應該是file1.js else file2.js。

這些文件位於「html/files_dir」,%user%是一組目錄,代表通過我的服務註冊的用戶名。

如何在nginx中配置它?我對php,asp或類似技術不感興趣,只有在使用nginx時纔有可能。

謝謝

回答

9

map讓你定義一個基於另一個變量變量的值。 map應在http級別聲明(即server外):

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

那麼下面location應該使用新的變量$file_suffix

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

你可以很容易地用nginx做到這一點。這是例子:

location /files_dir/ { 

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

} 

你可以閱讀有關NGINX here HTTP變量,以及有關nginx的重寫模塊here

+0

感謝這樣的伎倆你回答得也不錯,但設置$ file = file2.js;沒有「=」..只需設置$ file file2.js; – 2012-02-07 15:57:35

+2

我推薦閱讀http://wiki.nginx.org/IfIsEvil在位置使用ifs。 – MyGGaN 2013-03-06 10:05:36