天天看點

Nginx虛拟目錄(alias與root的差別)和 alias 的設定

Nginx 貌似沒有虛拟目錄的說法,因為它本來就是完完全全根據目錄來設計并工作的。如果非要給nginx安上一個虛拟目錄的說法,那就隻有Alias标簽比較“像”,幹脆來說說alias标簽和root标簽的差別吧。最基本的差別:alias指定的目錄是準确的,root是指定目錄的上級目錄,并且該上級目錄要含有location指定名稱的同名目錄。另外,根據前文所述,使用alias标簽的目錄塊中不能使用Rewrite的break。

說不明白,看下配置:

location /abc/ {
    alias /home/html/abc/;
}      

在這段配置下,http://test/abc/a.HTML就指定的是/home/html/abc/a.html。這段配置亦可改成

location /abc/ {
    root /home/html/;
}      

這樣,nginx就會去找/home/html/目錄下的abc目錄了,得到的結果是相同的。但是,如果我把alias的配置改成:

location /abc/ {
    alias /home/html/def/;
}      

那麼nginx将會從/home/html/def/取資料,這段配置還不能直接使用root配置,如果非要配置,隻有在/home/html/下建立一個 def->abc的軟link(快捷方式)了。一般情況下,在location /中配置root,在location /other中配置alias是一個好習慣。至于alias和root的差別,我估計還沒有說完全,如果在配置時發現奇異問題,不妨把這兩者換換試試。

nginx alias的設定

nginx也有像Apache的别名功能,格式為:

location ~ /alias {
root /home/www/default;
index index.php;
}      

但nginx在處理PHP腳本時,需要傳遞給FastCGI才能處理,是以比apache的别名設定多一個,下面我們以phpMyAdmin别名設定為例:

location ~ ^/phpmyadmin.+.php$ {
root /home/www/default;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /phpmyadmin {
root /home/www/default;
index index.php;
}      

繼續閱讀