nginx 將請求映射到具體文件(為網頁配置虛擬路徑)


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是不受影響的。

所以,我們可以斷定:請求跑串啦,所以,為了讓各個請求互不干擾,我們需要為虛擬路徑末尾加上"/"。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

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



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