https://jasonhzy.github.io/2016/08/25/nginx-alias-root/
http://blog.csdn.net/21aspnet/article/details/6583335
nginx指定文件路徑有兩種方式root和alias,root與alias主要區別在於nginx如何解釋location后面的uri,這會使兩者分別以不同的方式將請求映射到服務器文件上。
最基本的區別
alias 指定的目錄是准確的,給location指定一個目錄。
root 指定目錄的上級目錄,並且該上級目錄要含有locatoin指定名稱的同名目錄。
以root方式設置資源路徑:
語法: root path;
配置塊: http、server、location、if
以alias 方式設置資源路徑
語法: alias path;
配置塊: location
Example:
location /img/ {
alias /var/www/image/;
}
#若按照上述配置的話,則訪問/img/目錄里面的文件時,ningx會自動去/var/www/image/目錄找文件
location /img/ {
root /var/www/image;
}
#若按照這種配置的話,則訪問/img/目錄下的文件時,nginx會去/var/www/image/img/目錄下找文件
注意:
1.使用alias時,目錄名后面一定要加”/“。 2.使用alias標簽的目錄塊中不能使用rewrite的break。 3.alias在使用正則匹配時,必須捕捉要匹配的內容並在指定的內容處使用。 4.alias只能位於location塊中
配置alias支持PHP fastcgi解析
location /app {
alias /project/app/;
index index.php;
location ~ \.php$ { #方案一
fastcgi_pass 127.0.0.1:9100;
fastcgi_index index.php;
include fastcgi.conf;
}
}
#location ~ /app/.+\.php$ { #方案二
# rewrite /app/(.+\.php) /$1 break;
# include fastcgi.conf;
# fastcgi_pass 127.0.0.1:9100;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /project/app/$fastcgi_script_name;
#}
===============
nginx貌似沒有虛擬目錄的說法,因為它本來就是完完全全根據目錄來設計並工作的。
如果非要給nginx安上一個虛擬目錄的說法,那就只有alias標簽比較“像”,干脆來說說alias標簽和root標簽的區別吧。
最基本的區別:alias指定的目錄是准確的,root是指定目錄的上級目錄,並且該上級目錄要含有location指定名稱的同名目錄。另外,根據前文所述,使用alias標簽的目錄塊中不能使用rewrite的break。
所以使用nginx設置root時要注意一個問題,就是如果該root設置的前端目錄不是根目錄,那么在寫root的絕對地址時,要把前端目錄的部分省略掉。
我們用設置虛擬目錄指向的alias來和root比較一下就非常明顯了
location /abc/ { alias /home/html/abc/; }
在這段配置下,http://test/abc/a.html就指定的是 /home/html/abc/a.html。這段配置亦可改成
location /abc/ { root /home/html/;}
可以看到,使用root設置目錄的絕對路徑時,少了/abc,也就是說,使用root來設置前端非根目錄時,nginx會組合root和location的路徑,即 /home/html/abc/。
另外,使用alias時目錄名后面一定要加“/”