Nginx学习笔记05错误页面重定向

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处理方式稍有不同,浏览器上看到的页面结果也有所不同。

时间: 2024-12-13 12:48:47

Nginx学习笔记05错误页面重定向的相关文章

Nginx学习笔记04URL匹配规则和实际路径

1.1.1. URL匹配规则 匹配规则配置总结: location [=|~|~*|^~] /uri/ {  } 优先级 匹配方式 描述 1最高 = 精确匹配. 2 ^~ 以字符串开头,纯字符串,不支持正则表达式 3 ~* 正则表达式匹配,不区分大小写 3 ~ 正则表达式匹配,区分大小写 3 !~* 正则表达式不匹配,不区分大小写 3 !~ 正则表达式不匹配,区分大小写 4最低 / 通用匹配,匹配所有没匹配前面的条件的路径 当优先级相同的多个location结点都匹配某个请求的URL时,在配置文

SWIFT学习笔记05

1.Swift 无需写break,所以不会发生这种贯穿(fallthrough)的情况.2.//用不到变量名,可用"_"替换 for _ in 1...power { answer *= base } 3.case 可以匹配更多的类型模式,包括区间匹配(range matching),元组(tuple)和特定类型的描述. 可以这样用case case 1...3: naturalCount = "a few" 4.如果存在多个匹配,那么只会执行第一个被匹配到的 ca

C++ GUI Qt4学习笔记05

C++ GUI Qt4学习笔记05 qtc++正则表达式 QIntValidator           --  只让用户输入整数 QDoubleValidator     --  只让用户输入浮点数 QRegExpValidator    --  只让用户按照正则表达式定义好的样式进行输入 本章讲解如何使用Qt开发自定义窗口部件. 通过对一个已经存在的Qt窗口部件进行子类化或者直接对QWidget进行子类化,就可以创建自定义窗口部件. 集成自定义窗口到Qt设计师中,这样就可以像使用内置的Qt窗

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root.alias.index配置 实验环境: centos 测试节点IP:172.16.3.101 基于端口的虚拟主机: vim /etc/nginx/nginx.conf # 向里面的http {}里面加入如下内容   server { # server定义一个虚拟主机         listen 8080; # 监听本机所有IP端口8080         server_name www.test.com; # 虚拟主机名为:w

错误页面重定向

我是觉得错误页面重定向分为两种 造成不同点在于入口index.php文件,差别 define('APP_DEBUG',false); 一 按手册   搜索 "异常处理",那样配置,我觉得这种配置是在,  APP_DEBUG  为TRUE的情况处理的 在config 文件配置 'SHOW_PAGE_TRACE' => false, 'SHOW_ERROR_MSG' => false, 'ERROR_MESSAGE' => '发生错误!', 'ERROR_PAGE' =&

Springboot学习05-自定义错误页面完整分析

Springboot学习06-自定义错误页面完整分析 前言 接着上一篇博客,继续分析Springboot错误页面问题 正文 1-自定义浏览器错误页面(只要将自己的错误页面放在指定的路径下即可) 1-1-Springboot错误页面匹配机制(以404错误为例): 1-在模板引擎下:找templates/error/404.html;如果没有,则继续匹配 2-在模板引擎下:找templates/error/4XX.html;如果没有,则继续匹配 3-在静态资源下:找static/error/404.

nginx错误页面重定向

一.Nginx错误页面优雅显示的原因?   当我们访问网站时,由于特殊的原因,经常会出现诸如403,404,503等错误,这极大的影响用户的访问体验,所以我们很有必要做一下错误页面的优雅显示,以提升用户的浏览体验. 二.Nginx下如何定义优雅显示的页面呢?   下面我们就以404错误为例,具体步骤如下:   1.创建自己的404.html页面,放在站点目录下面:    2.更改nginx.conf配置文件,在http模块中加入 fastcgi_intercept_errors on;    3

apache的优化-日志轮询、错误页面重定向、压缩功能deflate、客户端缓存expire

1.apache日志轮询 1.1)什么是日志轮询 默认情况下apache的日志是写入到一个文件中的,这对日志的备份和分析造成不便.日志轮询就是可以把apache的日志根据时间进行分开,例如按天轮询:即apache会把当天的日志写入到一个独立的文件中. 1.2)下载并安装日志轮询工具 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz tarzxf cronolog-1.6.2.tar.gz  cdcronolog-1.6.2 ./con

nginx学习笔记之二:nginx作为web server

一.nginx的配置文件:nginx.conf 1.nginx配置文件的结构: main(全局配置段) events {...} http { ... server { location ... {...} location ... {...} ... } server { ... } } 2.配置参数需要以分号结尾,语法格式: 参数名  值1 [值2 ...]; 3.配置文件中还可使用变量: 模块内置变量 用户自定义变量:set var_name value 4.配置文件检查:nginx -t