其實是很簡單的設定,但由于不懂docker,走了許多彎路。
一、虛拟目錄設定規則無效
我想将一些靜态資源部署到測試伺服器上,友善開發和示範。測試伺服器是阿裡雲虛拟機,linux,上面裝有有一個nginx,可以完成這個小凱絲。結果自認為對nginx已經有了一定了解,這種簡單任務手到擒來,不料搞到雞毛鴨血。配置好虛拟目錄的映射後,系統死活不認,無法通路,自動跳到登入頁面。摘錄配置如下:
server {
listen 80;
server_name 192.168.0.248;
location / {
root /home/admin_ui/dist;
index /mscodereact/index.html;
try_files $uri $uri/ /mscodereact/index.html;
}
location /favicon.ico {
root /home/admin_ui/dist;
try_files $uri/ /mscodereact/favicon.ico;
}
#這就是我想添加的虛拟目錄
#請注意其路徑與 “/”指向的路徑并不相同
location /javapubzy/ {
index index.html;
alias /home/beian/javapubzy/;
try_files $uri $uri/ /javapubzy/index.html;
}
}
在網上查找來,查找去,通路這個http://192.168.0.248/javapubzy,都是跳到了登入頁面。究其原因,是因為系統路徑指向無效,于是做了預設處理,采用了第一條設定規則:
/ {
root /home/admin_ui/dist;
index /mscodereact/index.html;
try_files $uri $uri/ /mscodereact/index.html;
}
其中,
try_files $uri $uri/ /mscodereact/index.html;
,意思是,系統先看有沒有
$uri
這個檔案,沒有則看有沒有
$uri
這個檔案夾(即
$uri/
,後面的斜杠代表檔案夾)。如果沒有,則跳到
/mscodereact/index.html
,這是一個應用的首頁,需要登入。
二、規則無效的原因是路徑無法通路
/”指向的路徑并不相同
location /javapubzy/ {
index index.html;
alias /home/beian/javapubzy/;
try_files $uri $uri/ /javapubzy/index.html;
}
經過反複測試,發現将檔案夾移到根目錄"/"所在的位置,即可正常通路,放到别的地方就不行。想起之前同僚的提示,醒悟過來。我猜測,這個nginx是裝在docker裡的,安裝的時候,隻映射了一個特定的檔案夾,隻有将内容放在其中,才有可能識别。
改為
location /javapubzy/ {
index index.html;
alias /home/admin_ui/dist/javapubzy/;
try_files $uri $uri/ /javapubzy/index.html;
}
其實這一步純屬多餘。将檔案夾javapubzy放置到指定的根目錄後,無須做任何設定,即可通路。即使設定了,也不生效。如:
location /j/ {
index index.html;
alias /home/admin_ui/dist/javapubzy/;
try_files $uri $uri/ /j/index.html;
}
在這裡,想用j來代替javapubzy,反而無法通路,純屬畫蛇添足。
由于我目前在docker裡如何安裝nginx并不了解,是以無法扯更多,可參考如下文章:
docker中nginx的預設路徑位置和映射目錄啟動
三、虛拟目錄設定規則解釋
/ {
root /home/admin_ui/dist;
index /mscodereact/index.html;
try_files $uri $uri/ /mscodereact/index.html;
}
location /favicon.ico {
root /home/admin_ui/dist;
try_files $uri/ /mscodereact/favicon.ico;
}
location /javapubzy/ {
index index.html;
alias /home/admin_ui/dist/javapubzy/;
try_files $uri $uri/ /javapubzy/index.html;
}
這3個規則放在一起,結合起來看利于比較。可以發現映射路徑有 root 和 alias 兩種方式。
1、root與alias的差別
1)root指向虛拟目錄所在的父檔案夾,而alias直接指向虛拟目錄所在檔案夾
2)同一個虛拟路徑,如果既設定了root方式,又設定了alias方式,則以alias方式為準
2、預設頁面
index index.html;
不要用下面這個,這個是列出目錄下的檔案,不安全。
autoindex on;
3、try_files
try_files $uri $uri/ /javapubzy/index.html;
系統先看有沒有
$uri
這個檔案,沒有則看有沒有
$uri
這個檔案夾(即
$uri/
,後面的斜杠代表檔案夾)。如果沒有,則跳到
/javapubzy/index.html
。