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

相关推荐
FJW02081415 分钟前
【Linux】web服务器的部署和优化
linux·运维·服务器·rhce
Linux运维老纪22 分钟前
Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
linux·服务器·数据库·python·云计算·运维开发
平生不喜凡桃李34 分钟前
Linux 进程控制
linux·运维·服务器
鱼与宇1 小时前
Linux常用命令
linux·运维·服务器
小南家的青蛙1 小时前
lspci的资料
linux·运维·服务器
敖云岚1 小时前
【那些年踩过的坑】Docker换源加速详细教程(截至2025年4月)
运维·docker·容器
柳如烟@2 小时前
Docker安装ES :确保 Kibana 正确连接 Elasticsearch
运维·数据库·elasticsearch·docker·容器·kibana
网络工程师_ling2 小时前
【WLAN】华为无线AC双机热备负载分担—双链路热备份
运维·网络
饭来_3 小时前
配置 RDP 远程桌面协议连接ubuntu服务器桌面
linux·运维·服务器
李菠菜3 小时前
Redis主从/哨兵/集群离线部署指南
linux·运维·redis