美文网首页
nginx正则相关变量$1,$2,$3使用注意

nginx正则相关变量$1,$2,$3使用注意

作者: 歇歇 | 来源:发表于2018-12-27 15:18 被阅读119次

今天在配置nginx缓存图片时发现,一旦加上缓存配置,请求图片就会报错404。后发现在错误日志中图片的请求路径发生了奇怪的变化。

期望的请求地址:/user/apps/luwuer.com/img/xxx.jpg
实际请求地址却变作:/user/apps/jpg/luwuer.com/img/xxx.jpg

此时的nginx配置

server {
    listen       80 default_server;
    server_name  ~^(\w+\.)?(luwuer\.com)$; # $1 = 'blog.' || 'img.' || '' ; $2 = 'luwuer.com'

    root /root/apps/$1$2;

    location ~* \.(jpeg|png|gif|jpg)$ {
        expires 14d; # 缓存14天
        log_not_found on; # 是否在error.log中记录不存在的错误, 默认是
        access_log off; # 是否在access.log中记录
    }
    
    # ...
}

最终发现导致问题的原因,是root /root/apps/$1$2;,总结说来是两个原因。

  1. $1|$2|$3 ...是nginx在匹配正则时生成的变量,用于捕获一个正则表达式括号中匹配的字符串(从左到右依次存储在$1|$2|$3 ...中),新值覆盖旧值。
  2. location块中未设置root时,会取外层(server块)的root,但server.root明显不是先生成字符串然后赋值给location.root,而是直接把模板串交给location.root。

本配置中server.root被设置为/root/apps/$1$2/root/apps/luwuer.com$1 = '',$2 = 'luwuer.com'),在匹配到图片请求时$1被改变为图片的后缀名(/root/apps/jpg/luwuer.com# $1 = 'jpg',$2 = 'luwuer.com'),故访问地址错误找不到图片。

既然知道了原理,要修改也是简单,只需把第一次匹配到的$1,$2保存到自定义变量中。
修改后配置

server {
    listen       80 default_server;
    server_name  ~^(\w+\.)?(luwuer\.com)$; # $1 = 'blog.' || 'img.' || '' ; $2 = 'luwuer.com'
    
    set $pre $1;
    set $next $2;

    root /root/apps/$pre$next;

    location ~* \.(jpeg|png|gif|jpg)$ {
        expires 14d; # 缓存14天
        log_not_found on; # 是否在error.log中记录不存在的错误, 默认是
        access_log off; # 是否在access.log中记录
    }
    
    # ...
}

相关文章

  • nginx正则相关变量$1,$2,$3使用注意

    今天在配置nginx缓存图片时发现,一旦加上缓存配置,请求图片就会报错404。后发现在错误日志中图片的请求路径发生...

  • CentOS7 下 yum 安装 nginx + php + m

    1、使用yum安装Nginx 2、启动Nginx服务 3、使用yum安装php 4、使用yum安装php相关扩展 ...

  • Ubuntu安装与卸载Nginx

    1、Ubuntu下安装Nginx 2、使用 注意:如果不是root用户,使用nginx命令需要加sudo 3、在U...

  • Nginx配置rewrite重定向跳转

    1.功能:使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。 2.位置...

  • 8.nginx模块介绍

    nginx的模块 1.编译进nginx的模块2.提供那些配置3.模块合适被使用4.提供那些变量 查找nginx模块...

  • LUA $1的读写问题

    整理一下: Nginx 正则表达式捕获组变量$1、$2、$3等,也可以通过这个界面读取,方式为通过ngx.var[...

  • nginx

    nginx 1.nginx安装 2.nginx 配置 3.nginx内置变量 4.nginx 配置文件介绍 5.n...

  • Ubuntu系统上安装Nginx服务器以及使用方法

    1、删除nginx,–purge包括配置文件 2、自动移除全部不使用的软件包 3、罗列出与nginx相关的软件 4...

  • 022--Docker使用nginx负载场景

    2、nginx使用 1、简单使用nginx进行页面访问 2、nginx对网址进行概率性负载 3、根据域名进行负载

  • Multivariate Linear Regression

    1、多特征变量及其相关概念 2、多变量线性回归,其中表达式可转化为向量相乘,注意令x0 = 1 3、 4、单变量线...

网友评论

      本文标题:nginx正则相关变量$1,$2,$3使用注意

      本文链接:https://www.haomeiwen.com/subject/sfirlqtx.html