Nginx是經過 alias 設置虛擬目錄,在Nginx的配置中,alias目錄和root目錄是有區別的。php
/
符號;/
,那麼訪問的url地址中這個path目錄後面加不加/
不影響訪問,訪問時它會自動加上/
;可是若是location匹配的path目錄後面加上/
,那麼訪問的url地址中這個path目錄必需要加上/
,訪問時它不會自動加上/
。若是不加上/
,訪問就會失敗!/
,都不會影響訪問。舉例說明: 好比Nginx配置的域名是www.abcd.comhtml
http://www.abcd.com/huan/a.html
實際指定的是/home/www/huan/a.html;location /huan/ { alias /home/www/huan/; }
注意:alias指定的目錄後面必需要加上"/",即/home/www/huan/不能改爲/home/www/huan;nginx
http://www.abcd.com/huan
的訪問資源,二者配置後的訪問效果是同樣的;location /huan/ { root /home/www/; }
上面的例子中alias設置的目錄名和location匹配訪問的path目錄名一致,這樣能夠直接改爲root目錄配置;那要是不一致呢?web
location /web/ { alias /home/www/html/; }
訪問http://www.abcd.com/web
的時候就會去/home/www/html/下尋找訪問資源;這樣的話,還不能直接改爲root目錄配置。app
若是非要改爲root目錄配置,就只能在/home/www下將html->web(作軟鏈接,即快捷方式),以下:url
location /web/ { root /home/www/; }
ln -s /home/www/web /home/www/html
//即保持/home/www/web和/home/www/html內容一直code
* 因此,通常狀況下,在nginx配置中的良好習慣是: * 在location /中配置root目錄; * 在location /path中配置alias虛擬目錄。
例 1:server
server { listen 80; server_name www.abcd.com; index index.html index.php index.htm; access_log /usr/local/nginx/logs/image.log; location / { root /var/www/html; } location /haha { // 匹配的path目錄haha不須要真實存在alias指定的目錄中 alias /var/www/html/ops/; // 後面的"/"符號必定要帶上 rewrite ^/opp/hen.php(.*)$ /opp/hen.php?s=$1 last; # rewrite ^/opp/(.*)$ /opp/hen.php?s=$1 last; } location /wang { // 匹配的path目錄wang必定要真實存在root指定的目錄中(就/var/www/html下必定要有wang目錄存在) root /var/www/html; } }
例 2:htm
[root@web01 vhosts]# cat www.cde.com.conf server { listen 80; server_name www.cde.com; access_log /data/nginx/logs/www.cde.com-access.log main; error_log /data/nginx/logs/www.cde.com-error.log; location / { root /data/web/cde; index index.php index.html index.htm; } location /document/ { alias /data/web/document/; } }
[root@web01 vhosts]# ll /data/web/ total 4 drwxrwxr-x 2 app app 33 Nov 22 10:22 document drwxrwxr-x 4 app app 173 Sep 23 15:00 cde
如上配置後,則:
訪問http://www.cde.com/admin
就會找到/data/web/cde/admin目錄
訪問http://www.cde.com/document
就會找到/data/web/document 目錄 (裏面是一些靜態資源)資源