nginx配置 location root


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時目錄名后面一定要加“/”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM