Nginx同一個server部署多個靜態資源目錄

嘀咕部落格發表於2020-10-04

一般情況,有時候業務需求,需要在一個server下面不同目錄部署兩個不同的專案。

比如 http://domain:port/admin 匹配的是 admin 專案

比如 http://domain:port/react 匹配的是 react 專案

我們在nginx.conf裡面寫一個新的server

server {
  listen 6002;
  server_name **.**.**.**;
  gzip on;
  
  location /admin {
    alias /projects/admin/;
    #指定主頁
    index index.html;
    #自動跳轉
    autoindex on;   
  }
  
  location /react {
    alias /projects/react/;
    #指定主頁
    index index.html;
    #自動跳轉
    autoindex on;   
  }
  
}

然後關閉 nginx

[root]# nginx -s stop

重啟 nginx

[root]# nginx -c /etc/nginx/nginx.conf

總結:

這裡需要注意的就是location中的路徑匹配問題,root 和 alias 的區別;

# 錯誤寫法,會報404
location /admin {
    root /projects/admin/;
    #指定主頁
    index index.html;
    #自動跳轉
    autoindex on;   
}

location /react {
    root /projects/react/;
    #指定主頁
    index index.html;
    #自動跳轉
    autoindex on;   
}

# 當你訪問 http://***/admin
# root ==> 實際指向的是 http://***/admin/projects/admin/, 這個時候肯定找不到index.html
# alias ==> 實際指向的是 http://***/admin, 可以在/projects/admin/找到index.html

document:

In case of the root directive, full path is appended to the root including the location part, where as in case of the alias directive, only the portion of the path NOT including the location part is appended to the alias.

Let’s say we have the config

location /static/ {
    root /var/www/app/static/;
    autoindex off;
}

In this case the final path that Nginx will derive will be

/var/www/app/static/static

This is going to return 404 since there is no static/ within static/

This is because the location part is appended to the path specified in the root. Hence, with root, the correct way is

location /static/ {
    root /var/www/app/;
    autoindex off;
}

On the other hand, with alias, the location part gets dropped. So for the config

location /static/ {
    alias /var/www/app/static/;
    autoindex off;
}

the final path will correctly be formed as

/var/www/app/static

來源:https://blog.csdn.net/qq_26003101/article/details/100799451

 

=================第二篇:解釋root和alias的區別=================

公司測試環境使用nginx部署多個前端專案。網上查到了兩個辦法:

  • 在配置檔案中增加多個location,每個location對應一個專案
    比如使用80埠,location / 訪問官網; location /train 訪問培訓管理系統
  • 配置多個站點
    我選擇了配置多個location。
   location / {
         root   /data/html/;
         index  index.html index.html;
    }
    location /train {
         root   /data/trainning/;
         index  index.html index.html;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

配置完以後訪問。http://xxxx/train 提示404
找了好久才搞明白, location如果一個特定的url 要使用別名,不能用root,alias指定的目錄是準確的,root是指定目錄的上級目錄,改動後即可以使用了

location /train {
     alias  /data/trainning/;
     index  index.html index.html;
}


補充:

留言中有小夥伴問及alias和root區別,個人理解:
root與alias主要區別在於nginx如何解釋location後面的uri,這會使兩者分別以不同的方式將請求對映到伺服器檔案上。 root的處理結果是:root路徑+location路徑 alias的處理結果是:使用alias路徑替換location路徑 alias是一個目錄別名的定義,root則是最上層目錄的定義。 還有一個重要的區別是alias後面必須要用“/”結束,否則會找不到檔案的。。。而root則可有可無~~

 來源:https://blog.csdn.net/lizhiyuan_eagle/article/details/90639448

相關文章