Nginx & 详细举例 location -> index、return、rewrite、try_files、alias 各个属性的含义和注意事项

2023-10-27

1、准备工作

1.1 本案例以 centos7 系统作为演示,配置文件在 /etc/nginx/conf.d/test.conf 中,内容如下

server {
  listen  8000;
  server_name           127.0.0.1;
  root                  /home/cookcyq/web/;
  error_page  404              /40x.html;
  error_page  500 502 503 504  /50x.html;
  
  location / {
    return 200 'Hello,world';
  }
}

请务必记住好这几个配置,后面的案例都是以上面作为铺垫。

1.2 /home/cookcyq/web/ 目录如下:

home
	cookcyq
		web
			40x.html 内容为:40xxxxxxxx.html
			50x.html 内容为:50xxxxxxxx.html
			index.html 内容为: indexxxxxx.html

1.3 在 /etc/nginx/nginx.conf 配置文件中将上面的文件引入进来(下面这段下载时就自动加上的,如果没有看到手动加即可)

http{
	...
	include /etc/nginx/conf.d/*.conf;
}

1.4 重启 nginx ,访问 http://127.0.0.1/:8000/ 即可看到输出 Hello,world
在这里插入图片描述
接下来正式进入本文

2、location -> return

2.1 返回状态码 + 字符串

location /a {
	return 200 'Hi, I am a.';
}

重启 nginx,访问 http://127.0.0.1:8000/a 输出:
在这里插入图片描述

2.2 重定向

location /a {
  return https://www.baidu.com;
 }

重启 nginx,访问 http://127.0.0.1:8000/a 重定向到 https://www.baidu.com
在这里插入图片描述

3、location -> index

3.1 准备工作

/home/cookcyq/web/ 目录下新建 a 目录,并创建 index.html 和 test.html,结构如下

home
	cookcyq
		web
			a
				index.html  内容为: Hello, index.html.
				test.html 	  内容为:Hello,test.html.

3.2 使用

root                  /home/cookcyq/web/;
....
location /a {
    index index.html;
 }

现在访问 http://127.0.0.1:8000/a 时就会访问 /home/cookcyq/web/a/ 下的 index.html 文件
在这里插入图片描述

index 的作用就是当没有访问任何文件时,则默认访问 index.html

现在我们来指定一个,如 http://127.0.0.1:8000/a/test.html 就会访问 /home/cookcyq/web/a/ 下的 test.html 文件
在这里插入图片描述
如果我们指定一个不存在的文件比如 http://127.0.0.1:8000/a/ffff.html 则存在两种情况:

  1. 如果存在 , location / {} 则先访问
location / { 
	return "Hello,wolrd" 
}

在这里插入图片描述

  1. 如果不存在 location / { … } ,则访问前面所配置好的 error_page 404 /40x.html; 即 /home/cookcyq/web/40.html。
    在这里插入图片描述

4、location -> try_files

try_files 的细节蛮多的,稍不小心就掉进坑里,大家可要细心点哦。

4.1 准备工作

/home/cookcyq/web/ 目录下新建 b 目录结构如下

home
	cookcyq
		web
			b
				foo.html  		内容为: Hello, foo.html.
				bar.html	  	内容为:Hello,bar.html.
				index.html		内容为:Hello,b1, index.html.
				b2
					bird.html 		内容为:Hello,Bird.html
					index.html   	内容为:Hello,b2, index.html

请务必记住好这些结构,下面将会使用以上结构作为示例。

4.2 使用

location /b {
	try_files $uri $uri/ /b/index.html;
}

参数解释:

  • 参数一 $uri 表示访问 /b/path/anyfile
  • 参数二 $uri/ 表示访问 /b/path/ 时,访问该目录下的 index.xxx 索引文件
    注意:如果该目录下不存在任何 index.xxx 索引文件则返回 403,如果访问不存在的目录则返回 500。
  • 参数三 表示如果前面两个都找不到则访问 /b/index.html
    注意:如果 /b/index.html 也不存在,则返回 500

接下来我会一一演示如何触发这三个参数:
4.2.1 访问 http://127.0.0.1:8000/b/foo.html 则对应 $uri
4.2.2 访问 http://127.0.0.1:8000/b/b2/bird.html 则对应 $uri
在这里插入图片描述

4.2.3 访问 http://127.0.0.1:8000/b/ 则对应 $uri/
4.2.4 访问 http://127.0.0.1:8000/b/b2/ 则对应 $uri/
在这里插入图片描述

4.2.5 访问 http://127.0.0.1:8000/b/oooo.html 由于 oooo.html 不存在,则对应第三个参数 /b/index.html。
4.2.6 访问 http://127.0.0.1:8000/b/b2/oooo.html 由于 oooo.html 不存在,则对应第三个参数 /b/index.html。
在这里插入图片描述

4.2.7 访问 http://127.0.0.1:8000/b/oooo.htmlhttp://127.0.0.1:8000/b/b2/oooo.html 由于 oooo.html 不存在,且第三个参数 /b/index.html 也不存在的话(手动把index.html删掉或重命名即可实现效果),则返回 500
在这里插入图片描述

4.3 注意事项

  • 第三个参数推荐使用绝对路径的形式 /path/index.html ,请不要采用 $uri/index.html ,因为 $uri/ 是动态的目录,会随着 url 发生变化而变,这样很容易产生找不到目录而报 500 的问题
  • 第三个参数的 / 代表 root 根目录,但它并不会累加 location /b {} ,比如第三个参数为 /index.html 它对应的是 root/index.html 而不是 root/b/index.html,这就是为什么上面的第三个参数为 /b/index.html,而如果是 location /b { index /index.html } 则会累加 root/b/index.html 的形式,这点要注意。

5、location -> rewrite

rewrite 的细节也挺多的,不过理解起来很容易。

5.1 准备工作

/home/cookcyq/web/ 目录下新建 c 目录结构如下

home
	cookcyq
		web
			c
				c.html  	内容为:Hello, c.html.
			r
				1.html  	内容为:Hello, 1.html.
				2.html	  	内容为:Hello, 2.html.
				3.html		内容为:Hello, 3.html.

请务必记住好这些结构,下面将会使用以上结构作为示例。

5.2 使用

语法:rewrite [匹配模式] [重定向目标] [指令(可选)]

5.2.1 简单使用

location /c {
	rewrite ^(.*)$ /r/1.html;
}

当访问
http://127.0.0.1:8000/c
http://127.0.0.1:8000/c/c.html
http://127.0.0.1:8000/c/xxx/xxx/xxx
都会重定向访问 root/r/1.html
在这里插入图片描述

记得把前面 location / { return 200 ‘Hello,world’ } 语句去掉,因为 return 指令会跳过下面的 location

5.2.2 带有 last 指令

location /c {
    rewrite ^(.*)$ /r/1.html last;
    # 不会触发这个,因为 last 会跳过下面的执行语句
    rewrite ^(.*)$ /r/2.html last; 
}

当访问
http://127.0.0.1:8000/c
http://127.0.0.1:8000/c/c.html
http://127.0.0.1:8000/c/xxx/xxx/xxx
都会重定向访问 root/r/1.html
在这里插入图片描述

5.2.3 带有 last 指令

location /c {
    rewrite ^(.*)$ /r/1.html last;
    # 不会触发这个,因为 last 会跳过下面的执行语句,但它会继续走进下一个 location 块
    rewrite ^(.*)$ /r/2.html last; 
}
# 这里监听 /r/1.html 再做一次重定向
location = /r/1.html {
	rewrite ^(.*)$ /r/3.html last;
}

当访问
http://127.0.0.1:8000/c
http://127.0.0.1:8000/c/c.html
http://127.0.0.1:8000/c/xxx/xxx/xxx
都将重定向访问 root/r/3.html
在这里插入图片描述
5.2.4 带有 break 指令

location /c {
  rewrite ^(.*)$ /r/1.html break;
  # 不会触发这个,因为 break 会跳过下面的执行语句
  rewrite ^(.*)$ /r/2.html last; 
}

http://127.0.0.1:8000/c
http://127.0.0.1:8000/c/c.html
http://127.0.0.1:8000/c/xxx/xxx/xxx
都会重定向访问 root/r/1.html
在这里插入图片描述
5.2.5 带有 break 指令

location /c {
    rewrite ^(.*)$ /r/1.html break;
    # 不会触发这个,因为 break 会跳过下面的执行语句,同时也会跳过下面的 location 块
    rewrite ^(.*)$ /r/2.html last; 
  }
  # 由于 break 这里不会触发到
  location = /r/1.html {
    rewrite ^(.*)$ /r/3.html last;
  }

http://127.0.0.1:8000/c
http://127.0.0.1:8000/c/c.html
http://127.0.0.1:8000/c/xxx/xxx/xxx
都会重定向访问 root/r/1.html
在这里插入图片描述
5.2.6 容易犯错的重定向案例

location /c {
  rewrite ^(.*)$ /r/1.html last;
}
location = /r/1.html {
  index /r/2.html;
}

思考一下,最终会重定向到哪里?

其实如果你知道 index 的作用,答案就简单多了,这里只会重定向到 root/r/1.html 而不会访问 root/r/2.html,因为 index 只是未访问任何文件时作为默认访问索引文件的指令。
在这里插入图片描述

5.3 注意事项

  • rewrite 重定向目标如果不存在则走进 error_page 404 /40x.html
  • 如果 root 是 /home/cookcyq/web 没有加 /,那么重定向目标时得加 /,反之 root 有加 / 则重定向目标可加可不加 /

6、location -> root 与 alias

假如我们不想让每个 location 都继承 root,而是拥有自己的 root,那么 location 内的 root 与 alias 指令就是很好的选择。

6.1 准备工作

目录结构

home
	cookcyq
		web
			d
				1.html 			内容为 Hello, 1.html
				index.html 		内容为 Hello, web index.html
		my
			d
				foo.html 		内容为 Hello, foo.html.
				index.html 		内容为 Hello, my index.html.

6.2 root

root /home/cookcyq/web/;
location /d {
	root /home/cookcyq/my/;
	try_files $uri $uri/ /d/index.html;
}

当我们访问 http://127.0.0.1:8000/d/foo.html 就会访问 /home/cookcyq/my/d/foo.html
在这里插入图片描述

6.3 alias

root /home/cookcyq/web/;
location /d {
	alias /home/cookcyq/my/d/;
	try_files $uri $uri/ /d/index.html;
}

当我们访问 http://127.0.0.1:8000/d/foo.html 就会访问 /home/cookcyq/my/d/foo.html
在这里插入图片描述

6.4 root 与 alias 的区别

root 指令最终形成的路径为:root+location xxx/*
alias 指令最终形成的路径为:alias/*

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx & 详细举例 location -> index、return、rewrite、try_files、alias 各个属性的含义和注意事项 的相关文章

随机推荐

  • redis HyperLogLog

    1 概述 Redis 在 2 8 9 版本添加了 HyperLogLog 结构 Redis HyperLogLog 是用来做基数统计的算法 HyperLogLog 的优点是 在输入元素的数量或者体积非常非常大时 计算基数所需的空间总是固定
  • SpringBoot默认的五个静态资源位置&&自定义静态资源位置&&WebMvcCofigurer源码解析

    我们在SSM中的SpringMVC中配置静态资源过滤
  • Contest2609 - 高级语言程序实践--第8次作业--计信A2107-2113

    问题 A 统计字母数量 题目描述 有如下一段英文短文 请编写程序统计这段短文前 n 小段中每一个英文字母出现的次数 结果按次数降序排列 次数相同时 按字母表顺序输出 若 n 值大于短文行数 输出整篇文章中每一个英文字母出现的次数 大写字母按
  • Winsock属性、方法介绍

    Winsock是Mcrosoft windows提供的网络编程接口 它供了基于TCP IP协议接口实现方法 通过网络进行的数据通信 需要用地址来表示网络中的主机 TCP IP协议使用IP地址来作为主机的标识 实现的连接方式是通过IP地址来识
  • 亚信科技Java实习生(大三)面试

    亚信科技Java实习生面试 我面的挺晚的了 6 11才面 有的同学都实习几周甚至一个月了 但是同一个公司 我同学面试的时候 竟然全问的非技术问题 理想 大学经历 迷惑 可能我运气有一点好吧 看了一些面经 都是偏重基础 所以也是主要复习的基础
  • 2023华为od机试 Java 【路径步数】

    题目 小明喜欢户外运动 这个周末他打算去附近的山区探险 他面前有一张特殊的地图来帮助他找到这片区域的最高点 这张地图是一个由数字构成的网格 网格中的每一个单元格包含一个数字 代表那个点的高度 其中 数字 0 代表平地 而数字 1 到 9 则
  • 云服务器磁盘扩容后不显示,腾讯云服务器磁盘扩容问题小记

    操作系统 CentOS 7 2 文件类型 ext3 磁盘扩容前 一定要先做磁盘快照备份 1 卸载挂载点报错 umount dev vdb1 umount u01 target is busy In some cases useful inf
  • dclode mui.ajax无法发送跨域请求,type为abort

    前台 mui的ajax代码 后台java spring boot代码 后来得知原因是不能使用localhost和127 0 0 7需要使用本机的IP地址 且手机和电脑要连同一无线 修改ip地址后 程序正常 且需要注意 json要为大写 Js
  • 一道有关路由器的实验题 寻找前辈指导

    如图所示 使用Dynamips搭建网络环境由路由器R1 R5构成 路由器PC模拟PC机 R1 R2上配置Loopback地址 好像我的这个拓扑图无法显示 不过我把拓扑图传到附件那里了 如果有乐于助人的好前辈的话 那还的麻烦您把它下载来看看
  • ArrayList、ArrayDeque与LinkedList区别

    ArrayList ArrayDeque与LinkedList区别 ArrayList ArrayDeque内部以数组的形式保存集合中的元素 因此随机访问元素时有较好的性能 而LinkedList内部以链表的形式来保存集合中的元素 因此随机
  • 平均值不等式的证明

    平均值不等式的证明 需要证明的结论 对任意 n n n个正数 a 1
  • 【华为OD机试真题 JS】停车场车辆统计

    标题 停车场cars 数组表示 其中值1为有车 0为无车 车有三种大小 小车占位1 卡车占位2 货车占位3 求最少可以停多少车 输入描述 输入 整型字符串数组cars 其中1表示有车 0表示没车 数组长度小于1000 输出 整型数字字符串
  • 泛微为什么大量招人_OA市场增长乏力 泛微未来靠什么取胜?

    上周 泛微网络发布了其2019年中期财报 营收和利润均获得增长 财报显示 2019 年上半年 公司共实现营业收入 50 494 62 万元 同比增长 25 96 实现归母净利润 4 919 37 万元 比上年同期增加 35 70 尽管收入增
  • Go(五)数组

    目录 Array 数组 数组定义 数组的初始化 方法一 方法二 方法三 数组的遍历 多维数组 二维数组的定义 二维数组的遍历 数组是值类型 Array 数组 数组是同一种数据类型元素的集合 在Go语言中 数组从声明时就确定 使用时可以修改数
  • 常见凭证获取方法

    常见凭证获取方法 Windows下凭证获取 系统密文数据 原理介绍 SAM系统安全账号管理 是微软设计的一个安全机制 为了保护账号以及密码的安全性 路径是C windows system32 config SA 该文件是无法修改和删除的 它
  • Balanced Ternary String【Codeforces Round #531 (Div. 3)D】【贪心、构造】

    题目链接 一道简单的构造 我们可以分成几个状态 因为所有的状态只有8个 所以 直接写每个状态即可 哎 被hack了 烦啊 谁让我写的好烂 好菜啊 呜呜呜 include
  • 云服务器一直显示关机中,云服务器一直提示关机中

    云服务器一直提示关机中 内容精选 换一换 云服务器组是对云服务器的一种逻辑划分 云服务器组中的弹性云服务器遵从同一策略 当前仅支持反亲和性 即同一云服务器组中的弹性云服务器分散地创建在不同的主机上 提高业务的可靠性 您可以使用云服务器组将业
  • 适合上班族的兼职有哪些?上班族兼职赚钱项目

    上班族如何赚外快 其实上班族压力很大的 表面看起来衣着得体 出入高端写字楼 但一个月到手的几千元工资除去房租水电生活车马费后 基本上余不下什么钱 更别谈买车买房了 所以很多上班族都想知道 如何利用业余时间兼职钱 今天理想青年工作室就为大家分
  • Unity3D-Shader之两张图片叠加并且通过颜色调控

    最近项目需要做一个图片叠加在一个模型上 而且还需要通过调整颜色改变两个图片的颜色和透明程度 另外 还需要一个调控值 管理两张图片是否完全显示 Shader如下 Shader Unlit BlockTextrue Properties Mai
  • Nginx & 详细举例 location -> index、return、rewrite、try_files、alias 各个属性的含义和注意事项

    1 准备工作 1 1 本案例以 centos7 系统作为演示 配置文件在 etc nginx conf d test conf 中 内容如下 server listen 8000 server name 127 0 0 1 root hom