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。

nginx 配置yhinkcmf Nginx 配置默认的错误页面_nginx 配置yhinkcmf

 

再介绍使用error_page配置项指定错误页面的情况。

error_page配置项存在以下多种重定向方式,Nginx做了不同的处理,实际访问到页面也存在一定的差异,而浏览器的地址栏的表现也存在不同。

下面分别讨论在各种不同重定向方式下,访问同一个URL,而这个URL对应的原始页面不存在的情况下,Nginx的处理方式以及浏览器的表现。

试验过程中,浏览器中输入的原始URL都是:http://ng.coe2coe.me:8000/abc/2.txt

这个URL对应的页面并不存在,默认会按照Nginx内置处理方式,产生HTTP 404状态码的响应。

nginx 配置yhinkcmf Nginx 配置默认的错误页面_nginx 配置yhinkcmf_02

 

 

在以下讨论中,都使用了error_page配置项,但是各自的配置方式稍有不同,因而产生了不同的结果。

 (1)重定向到内部页面。

配置内容:

location /abc {

          root  html;

         error_page 404  /404.html;

       }

运行结果:

将内容为http://ng.coe2coe.me:8000/404.html的内容,状态码为404,地址栏URL没有变化。

nginx 配置yhinkcmf Nginx 配置默认的错误页面_状态码_03

 

 

(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状态码就变化了。

nginx 配置yhinkcmf Nginx 配置默认的错误页面_状态码_04

 

 (3)修改HTTP状态码。

配置内容:

location /abc {

          root  html;

           error_page 404 = /404.html;

       }

运行结果:

由于使用了error_page 404 = /404.html这种方式,在第(1)种情况的基础上,加了等于号,处理结果也发生了变化。此时Nginx根据/404.html页面的访问结果来决定HTTP 状态码。由于这里/404.html页面是存在的,状态码是200。

nginx 配置yhinkcmf Nginx 配置默认的错误页面_html_05

 

 (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的内容。

nginx 配置yhinkcmf Nginx 配置默认的错误页面_状态码_06

 

 

 

总结:

(1)关于页面刷新与浏览器缓存:

上述试验过程中,状态码为200的情况时,每次使用浏览器发送请求之前都没有使用浏览器缓存。如果使用浏览器缓存,有些情况下状态码为304。Chrome浏览器不使用浏览器缓存的方法有两种:

(a)使用浏览器清空历史记录的方式来清空缓存

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

(2)Nginx支持的另外一种指定错误页面的方式,即使用try_files。 

(3)在各种情况下,Nginx处理方式稍有不同,浏览器上看到的页面结果也有所不同。