location模块与rewrite重定向

目录

location匹配

正则表达式

三种location匹配

匹配规则

匹配的优先级

生产中的匹配规则

rewrite

rewrite执行顺序

X_Forwarded_For

X-Real-IP

nginx的内置变量

content-type

rewrite的语法


location匹配

正则表达式

元字符

. 任意单个字符

^ 起始位置

$ 结束位置

*匹配前边的字符0次或者多次

+匹配前面的字符一次或多次

? 匹配一次或0次

\ 转义符

[0-9A-Za-z] 匹配0-9 A-Z a-z

[a] 只能匹配a

{n} 连续重复出现n次

{n,m}最少出现n次,最多出现m次

| 逻辑或

正则表达式匹配的是文件内容

三种location匹配

1.精确匹配 location = / {…}

2.正则匹配 location ~ / {…}

3.一般匹配 location / {…}

匹配规则

= 精确匹配,必须完全一致,负责无法匹配

^~ 匹配普通字符,是前缀匹配

~ 区分大小写的匹配

~* 不区分大小写的匹配

~$ 结束位置

!~ 区分大小写的取反匹配

!~* 不去分大小写的取反匹

匹配的优先级

越精确,优先级越高

= 优先级最高

~ 优先级次之

/ 优先级最低

location = 大于 location ^~ 大于location ~* 大于location /test/ 大于location /

一旦匹配成功,不在向下匹配

生产中的匹配规则

第一个必选规则

location = / {} 直接匹配根网站,通过域名访问网站首页最多,使用精确匹配可以加快处理速度

第二个规则

location ^~ /test/ {}

用于处理静态页面,目录匹配

第三个规则

location ~* .(gif|jip|png|css) 匹配图片

第四个规则

location / {

proxy_pass #指定代理,反向代理转发动态请求。.php .jsp的请求发到后端

}

rewrite

重定向,rewrite使用nginx全局变量或是自己设置的变量,结合正则表达式和标志位实现URL的重定向

rewrite执行顺序

1、执行server块当中的rewrite的

2、执行location匹配

3、如果location当中还有rewrite,继续执行。

不停的rewrite会陷入死循环,十次后报错,报错状态码:500

X_Forwarded_For

用于获取HTTP请求头中的X-Forwarded-For字段的值。 X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址。 proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端。

X-Real-IP

头部为客户端真实IP地址 proxy_set_header X-Real-IP $remote_addr; proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址。 这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器。

nginx的内置变量

$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL。

$remote_addr: 客户端的IP地址。 $remote_port: 客户端的端口号。 $server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

$request_method: 请求的HTTP方法,如GET、POST、等。

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。

$content_length: 请求的Content-Length头信息,表示请求体的长度。

$scheme: 请求的协议,通常是http或https。

$request_filename: 请求的文件名,用于指定请求的实际文件路径。 $document_root: 当前请求的根目录。 $server_name: 服务器名称,用于匹配server块的server_name指令。

content-type

location / {

root html; index index.html index.htm;

default_type text/plain; return 200 "way:$request_method";

}

default_type text/plain;

表示如果没有在其他地方显示设置: conte

nt-type的头字段,默认响应为text/plain纯文本格式

text/plain默认响应类型,也就是页面

text/plain 纯文本格式,类似于.txt

text/css CSS样式的类型

text/javascript Java脚本,.js 前端文件,也可以理解为Java解析的程序文件

rewrite的语法

rewrite <regex><replacement>[flag]

rewrite 开始重定向

regex 正则匹配的规则

replacement 替换内容,重定向的新url路径

[flag] 标志位

permnaent 永久重定向 返回码301

redirect 临时重定向返回码302

永久重定向 301 会永久性的变更URL,搜索引擎会转移它的权重以及排名到新的URL

临时重定向: 302,用于短期变更(网站维护,或者升级更新)索引擎不会转移它的权重以及排名到新的URL

304 表示获取的是本地缓存

break 是重定向,但不会改变URL,而且只会请求一次,并跳出当前匹配,即刻终止

last 本条规则匹配完成后,继续向下匹配,匹配时要注意防止死循环

rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location,10次,返回码500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值