• 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 [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

  • 相关阅读:
    金融行业数智化供应链管理系统:多维度评估分析供应商,赋能智能金融变革
    消费品的「轻重」权衡术
    NC1 大数加法
    本地事务与分布式事务
    2023(19届) 软件工程毕业设计选题推荐(二)
    【斗破年番】探班视频曝光,猜测美杜莎怀孕之事,魔改剧情
    安卓sdk对应表
    自定义类型:结构体(内存对齐),枚举,联合
    20 _ 散列表(下):为什么散列表和链表经常会一起使用?
    docker安装elasticsearch镜像与加载容器
  • 原文地址:https://blog.csdn.net/as958361025/article/details/133795795