Nginx錯誤頁面重定向


Nginx至少存在兩種不同的配置來指定錯誤頁面:

使用try_files配置項。

使用error_page配置項。

先介紹使用try_files配置項的情況。

Nginx提供的try_files配置允許在一個location中指定多個潛在的可能的響應頁面,Nginx將按照定義的次序依次嘗試訪問這些響應頁面,直到成功訪問該頁面。根據這個機制,可以在try_files配置的頁面列表的最后面加上一個頁面作為默認的錯誤頁面。

配置內容:

 location /abc {

          root  html;

          try_files $uri    /404.html;

     }

運行結果:

當請求存在的頁面時,將正常訪問該頁面。當訪問到不存在的頁面時,將跳轉到/404.html頁面,此時瀏覽器地址欄URL沒變化,但是狀態碼不再是404,而是200。

 

再介紹使用error_page配置項指定錯誤頁面的情況。

error_page配置項存在以下多種重定向方式,Nginx做了不同的處理,實際訪問到頁面也存在一定的差異,而瀏覽器的地址欄的表現也存在不同。

下面分別討論在各種不同重定向方式下,訪問同一個URL,而這個URL對應的原始頁面不存在的情況下,Nginx的處理方式以及瀏覽器的表現。

試驗過程中,瀏覽器中輸入的原始URL都是:http://ng.coe2coe.me:8000/abc/2.txt

這個URL對應的頁面並不存在,默認會按照Nginx內置處理方式,產生HTTP 404狀態碼的響應。

 

 

在以下討論中,都使用了error_page配置項,但是各自的配置方式稍有不同,因而產生了不同的結果。

 (1)重定向到內部頁面。

配置內容:

location /abc {

          root  html;

         error_page 404  /404.html;

       }

運行結果:

將內容為http://ng.coe2coe.me:8000/404.html的內容,狀態碼為404,地址欄URL沒有變化。

 

 

(2)重定向到外部頁面

將跳轉到指定的外部服務器的頁面。

配置內容:

 location /abc {

          root  html;

          error_page 404  http://ng.coe2coe.me:8000/404.html;

       }

運行結果:

瀏覽器地址欄的URL已經變化為error_page指定的URL,,HTTP狀態碼為200。

從下圖可以看到變化后的URL為:http://ng.coe2coe.me:8000/404.html。

在僅僅將error_page指向的頁面從服務器內部頁面變化為外部服務器的頁面后,HTTP狀態碼就變化了。

 

 (3)修改HTTP狀態碼。

配置內容:

location /abc {

          root  html;

           error_page 404 = /404.html;

       }

運行結果:

由於使用了error_page 404 = /404.html這種方式,在第(1)種情況的基礎上,加了等於號,處理結果也發生了變化。此時Nginx根據/404.html頁面的訪問結果來決定HTTP 狀態碼。由於這里/404.html頁面是存在的,狀態碼是200。

 

 (4)使用內部重定向。

在nginx的配置文件中,使用@標記來表達內部跳轉指令,這種指令也可以用於error_page的配置中。

配置內容:

location /abc {

          root  html;

          error_page 404 @notfound;

     }

 

 location @notfound {

        proxy_pass http://tomcat101a.coe2coe.me:8080;

     }

運行結果:

在這種情況下,瀏覽器的地址欄URL沒有變化,HTTP狀態碼404也沒有變化,顯示的內容是http://tomcat101a.coe2coe.me:8080/abc/2.txt的內容。

 

 

 

總結:

(1)關於頁面刷新與瀏覽器緩存:

上述試驗過程中,狀態碼為200的情況時,每次使用瀏覽器發送請求之前都沒有使用瀏覽器緩存。如果使用瀏覽器緩存,有些情況下狀態碼為304。Chrome瀏覽器不使用瀏覽器緩存的方法有兩種:

(a)使用瀏覽器清空歷史記錄的方式來清空緩存

(b)使用Ctrl+F5來刷新頁面,而不是使用F5。

(2)Nginx支持的另外一種指定錯誤頁面的方式,即使用try_files。 

(3)在各種情況下,Nginx處理方式稍有不同,瀏覽器上看到的頁面結果也有所不同。

 

原文鏈接:http://www.bubuko.com/infodetail-2133221.html

 


免責聲明!

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



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