location rewrite

Nginx

location 匹配的规则和优先级
Nginx常用的变量
rewrite: 重定向功能

Location

匹配 URI

URI:统一资源的表示符,是一种字符串标识,用于标识抽象或者物理资源

先来巩固一些与location结合使用的正则表达式

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

元字符

**. :任意单个字符,包括汉字
^:起始位置
$:结束位置
*:匹配前面的字符0次或者多次
+:匹配前面的字符一次或者多次
?:一次或0次
\:转义符

0-9A-Za-z\]:匹配0-9,A-Z,a-z. \[a\]:只能匹配a. {n}:连续重复出现几次 {n,m}:最少出现,最多出现几次 ():分组 \|:逻辑或**

location匹配的规则
  • = :精确匹配,完全匹配,错一个字都匹配到,必须完全一致。
  • ^~: 匹配普通字符,前缀匹配
  • ~$:结束位置
  • ~ :区分大小写的匹配
  • ~* :不区分大小写的匹配
  • !~ :区分大小写的匹配,取的逻辑非 ------ 取反
  • !~* : 不区分大小写的取反

带有"~"的都表示正则表达式

location 用来匹配uri

  • 精确匹配:location = / {...}
  • 正则匹配:location ~ / {...}
  • 一般匹配: location / {...}
location匹配规则官网


www.gsn.com/ 匹配的是A

www.gsn.com/test 匹配的是B

www.gsn.com/documengs/ 匹配的是C

www.gsn.com/images/ 匹配的是D

www.gsn.com/documents/1.jpg 匹配的是E
第一个规则

location = / {}

直接匹配根网站。通过域名访问网站首页是最多的。使用精确匹配,可以加快处理速度、首页。

第二个规则

location ^~ /static/

处理静态文件的请求,目录匹配

第三个规则

location ~* (gif / jpg / png / css)匹配图片用的

第四个规则------通用

location / {

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

location /test/ {

proxy_pass 指定代理,反向代理,转发动态请求,将".php"".jsp"发到后端服务器

}

匹配的优先级

越精确,优先级越高

= 精确匹配优先级最高

~ 正则次之

/ 通用的优先级最低

优先级:

location = > location ^~ > locatuin ~* > location /test/ > location /

一旦匹配到了之后,不再向下匹配

Nginx内置变量

$remote_addr:客户端的IP地址

$remote_port:客户端的端口号

$server_addr:服务器的IP地址。

$server_port:服务器的端口号。

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

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头部的值传递给后端服务器。

查看客户端端口号;服务端IP地址

扩展
  • $uri: 请求的URI,不包含主机和查询参数。
  • $request_uri: 请求的URI,包含主机和查询参数。
  • $args: 查询参数部分,即?后面的内容。
  • $query_string: 整个查询字符串,包含?。
  • $host: 请求的主机名。
  • $http_user_agent: 请求的User-Agent头信息,用于表示请求客户端浏览器和操作系统。
  • $http_referer: 请求的Referer头信息,表示当前页面的来源URL。
  • $content_type: 请求的Content-Type头信息,表示请求体的MIME类型。
  • $content_length: 请求的Content-Length头信息,表示请求体的长度。
  • $scheme: 请求的协议,通常是http或https。
  • $request_filename: 请求的文件名,用于指定请求的实际文件路径。
  • $document_root: 当前请求的根目录。
  • $server_name: 服务器名称,用于匹配server块的server_name指令。

rewrite 重定向 *面

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

rewrite执行顺序
  • 执行server块当中的rewrite的
  • 执行location匹配
  • 如果location当中还有rewrite,继续执行

不停rewrite死循环,只能10次然后报错,报错的状态码:500

rewrite语法

rewrite <regex> <repTacemnet> [flag]

rewrite:开始重定向

regex:正则匹配的规则

replacemnet:表示跳转后的内容,你要重定向的url

flag:标志位
标志位

  • permanent:永久重定向,返回码301;永久性的变更url,搜索引擎会转移他的权重以及排名到新的URL
  • redirect:临时重定向,显示的返回码302;用于短期变更(网站维护,或升级更新);搜索引擎不会转移权重和排名到新的URL
  • 304:表示获取的是本地缓存
  • break:是重定向但不会改变url,而且只会请求一次;跳出当前匹配,即刻终止
  • last:本条负责匹配完成后继续向下匹配,只要有last就继续匹配;配置的时候需要注意,防止死循环

扩展

以页面形式展示,却以文本格式下载如何解决?

日志中如下报错:

rewrite or internal redirection cycle while processing

#代表写成死循环一直在匹配location,10次之后返回码500

相关推荐
Cynthia的梦8 分钟前
Linux学习-Linux进程间通信(IPC)聊天程序实践指南
linux·运维·学习
卡戎-caryon14 分钟前
【Linux网络与网络编程】03.UDP Socket编程
linux·服务器·网络·笔记·单例模式·udp·网络通信
莲动渔舟1 小时前
Nyquist插件基础:LISP语法-自定义函数
服务器·开发语言·lisp·音频处理·audacity
敲上瘾1 小时前
高并发内存池(二):Central Cache的实现
linux·服务器·c++·缓存·哈希算法
安顾里2 小时前
Linux命令-tar
linux·运维·服务器
沐土Arvin2 小时前
Nginx 核心配置详解与性能优化最佳实践
运维·开发语言·前端·nginx·性能优化
不爱敲代码的阿玲2 小时前
西门子s7协议
服务器·网络·tcp/ip
有莘不破呀2 小时前
服务器磁盘卷组缓存cache设置介绍
linux·运维·服务器
DBWYX2 小时前
gcc 链接顺序,静态库循环依赖问题
linux·运维·服务器
zxsz_com_cn3 小时前
风电行业预测性维护解决方案:AIoT驱动下的风机健康管理革命
大数据·运维·人工智能