1.情景展示
我們知道,nginx三個核心功能是:靜態服務器、反向代理和負載均衡;
nginx可以充當靜態服務器,將靜態資源文件(HTML、CSS、JS、圖片等文件)通過網絡進行訪問。
如下圖所示:
通過網絡訪問得到demo.html文件,我們直接在nginx服務后面+"/路徑/demo.html"即可。
對於習慣了全棧式開發的java人員來說,往往會覺得這種方式很別扭,因為,要訪問的頁面控制權往往在javaWeb后台手里;
換句話說就是:瀏覽器無法直接訪問頁面,瀏覽器只能通過向后台發送請求至后台Controller,由它來決定最終要轉發或重定向的頁面。
但是,前后端分離后,后端釋放了對於頁面的控制權,取而代之的是:nginx來充當前端的服務器。
這種直接將本地文件暴露在網絡上的方式,我覺得不太好。
能不能,為網頁提供虛擬訪問路徑,通過虛擬路徑訪問到對應的html文件,而不是直接訪問html文件?
2.具體分析
location的網絡請求映射和本地目錄映射來實現。
3.解決方案
我們先來看一看:如何通過網絡訪問html文件?
我的demo.html的絕對路徑是:C:\Users\Marydon\Desktop\demo.HTML;
找到nginx的安裝目錄--》找到conf目錄下的nginx.conf;
使用文本工具打開nginx的配置文件。
sever:就是服務器的意思,我們通過server{}來進行服務器配置;
listen:這是配置的是服務器使用的端口號(默認值是80);
server_name:配置的是該服務器的訪問IP(默認值是localhost);
--------------------------------------------------------------------
以上是默認的nginx服務器配置,代表的含義是:
服務器訪問地址:http://localhost:80。
--------------------------------------------------------------------
charset:服務器的字符集(默認沒有啟用該項配置);
location+請求路徑:對指定的請求進行具體處理,具體處理在{}中進行;
root+目錄:本地項目所在根路徑;
index+目錄:本地項目歡迎頁所在路徑及歡迎文件名。
location / {
root html;
index index.html index.htm;
}
代表的意思是:
訪問http://localhost,將會映射到該location標簽體,最終指向的是html/index.html。
配置網頁的虛擬訪問路徑
說明:虛擬主機配置多個location,根據url的不同,路由到不同的代理路徑上。
如何為http://localhost/index配置虛擬訪問路徑?
#路徑包含/index/的請求,跳轉到C:\Users\Marydon\Desktop\demo.HTML頁
location /index/ {
root C:\Users\Marydon\Desktop;
rewrite ^/index$ \demo.HTML break;
}
location /index/:設置服務器攔截含有/index/的請求
root:要訪問的文件所在目錄;
rewrite:使用正則表達式設置跳轉規則及跳轉頁面。
注意:如果配置的映射路徑不是靜態資源文件的真實訪問路徑,需要在路徑末尾加上"/"。
具體原因,第4部分。↓↓↓
4.擴展
如何禁用nginx歡迎頁?
我們通過上面可以知道:通過location /最終指向的是html/index.html文件;
所以,我們有兩種實現方式。
錯誤方式:修改nginx.conf並重新加載配置文件。
可以使用#號將index注釋掉或者刪掉。
index.html可以照常訪問。
正確方式:刪除或者重命名index.html。
在html目錄下。
對應的是:
對應的是:
如何自定義指定nginx的歡迎頁?
方式一:修改html目錄下的index.html文件。
方式二:修改映射歡迎頁的根目錄。
映射路徑末尾要不要加"/"?
如果是虛擬路徑的話需要加"/",如果是真是路徑,不需要加"/"。
映射路徑不以"/"結尾,表示的含義是:匹配所有以XX開頭的請求。
舉例:
我本想將/index映射到demo.html上,但是,location /index {}卻攔截了所有以"/index"開頭的請求。
首頁訪問變成了404
/請求指定的root無效,實際其作用的是/index對應的root。
因為nginx先是檢測到請求是"/",然后轉換成index請求,結果被location /index{}截獲,最終就成了下面這個樣子。
訪問/index.html也是如此
此時,我們去訪問/50x.html是不受影響的。
所以,我們可以斷定:請求跑串啦,所以,為了讓各個請求互不干擾,我們需要為虛擬路徑末尾加上"/"。