一个群友提到:

用nginx image_filter模块裁图,用!拼宽高能够实现,现在想用参数传宽高总是报错,配置如下:

 

location ~ ^/images/.* {

    if ( $query_string ~ "w=(\d+)&h=(\d+)" ) {

        set $w $1;

        set $h $2;

        rewrite "/images/(.*)" ${uri}!${w}x${h} last;

    }

}

location ~* ^/images/(.*)!(\d+)x(\d+) {

    set $w $2;

    set $h $3;

    image_filter_jpeg_quality 50;

    image_filter resize $w $h;

    image_filter_buffer 10M;

    try_files /images/$1  404;

}

 

在使用这个rewrite规则的时候 主要是想通过query_string传宽和高,通过uri传递是没有问题的。但是报错。

nginx: [emerg] directive "rewrite" is not terminated by ";"

 

然后有其他群友点到:

猜测是引号的问题,加个引号试试

测试了一下,加双引号就好了~

 

我顺带google了下原因,在使用 rewrite "/images/(.*)" ${uri}!${w}x${h} last;    这段时,你是想表达变量,但是{} 被解析成规则的起始和结束标记,为了安全起见 需要带上引号

 

其他讨论:

刚开始用nginx的时候坑过几次,空间快满了,rm掉 nginx的log~~ 结果空间释放不出来。。最后要 lsof 才能发现问题~~

其他建议:

location ~* /img/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ {           
    set $h $2;
    set $w $3;
    if ($h = "0") {
        rewrite /img/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /img/$1.$4 last;
    }
    if ($w = "0") {
        rewrite /img/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /img/$1.$4 last;
    }
    #根据给定的长宽生成缩略图
    image_filter resize $h $w;
    #原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer
    image_filter_buffer 2M;                         
    #error_page  415              /img/notfound.jpg;
    try_files /img/$1.$4  /img/notfound.jpg;   
}

location ~* /img {
}

这个rewrite规则作为参考。

Nginx 设置rewrite规则是遇到的一个{}大括号引发的报错问题的更多相关文章

  1. Nginx的Rewrite规则与实例

    通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有 ...

  2. Apache和Nginx的Rewrite规则对比

    一.Apache的rewrite 1.Rewrite规则简介: Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.h ...

  3. Nginx之Rewrite规则

    IF语句: http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_rewrite_module.html#if 首先申明nginx只有i ...

  4. Nginx 之 Rewrite 规则

    write 规则介绍 Rewite 规则作用 Rewrite规则可以实现对url的重写,以及重定向 作用场景: URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 SEO优化 维护:后台 ...

  5. nginx 带? rewrite 规则

    由于需要重定向 url ,nginx需要rewrite .参考文献 http://huangqiqing123.iteye.com/blog/2083434 需求:将http://10.106.1.3 ...

  6. nginx 重定向 rewrite 规则

    1.rewrite配置 server { listen 80 default_server; server_name jeson.t.imooc.io; access_log /var/log/ngi ...

  7. 设置background属性使用selector的时候内置?attr报错的解决方案

    当我们设置background属性的时候可以设置background="@color/black" 也可以设置 background="@drawable/selecto ...

  8. C语言 在VS环境下一个很有意思的报错:stack around the variable was corrupted

    今天做一个很简单的oj来温习下c 语言 题目如下 输入 3位正整数 输出 逆置后的正整数 代码如下: #include"stdio.h"int main(){ float h,su ...

  9. 面试题——设计一个程序:运行报错Stack Overflow Error

    所谓Stack Overflow就是栈里面放的东西太多了,溢出了. 大家知道栈里面存放的是基本数据类型还有引用类型. 下面看这个程序 class Test { public static void m ...

随机推荐

  1. python16_day28【crm只读、权限、堡垒机】

    一.只读 二.万能权限 三.堡垒机

  2. python学习之路-day10

    一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程. 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程. 车间负责把资源 ...

  3. 内存记号(Memory Trail)[自定义的名字] --调试方法

    即使你把输出导向到文件中,运转记录花费的时间所带来的冲击,仍然足够改变程序的执行结果.如果要改善这种情况,我必须回到一个我所谓的“Memory Trails”(内存记号)的低阶技术中.为了使用 mem ...

  4. MySQL中特有的函数If函数

    上面我们已经知道了case函数可以实现逻辑判断,可以是很复杂的逻辑判断,但是如果我们只想实现的是如果这个条件成立就返回A否则就返回B这样简单的逻辑如果用case的话,未免复杂了.我们可以使用if函数来 ...

  5. 安装memcached扩展 验证过了可行

    . 安装libmemached 复制代码 代码如下: wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached ...

  6. capistranorb

    远程服务器自动部署工具 https://capistranorb.com/

  7. js正则表达式的使用详解

    本文转自:http://www.jb51.net/article/39623.htm 1定义正则表达式2关于验证的三个这则表达式方法3正则表达式式的转义字符 1定义正则表达式在js中定义正则表达式很简 ...

  8. linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍

    <linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...

  9. 安装etcd集群

    kuberntes 系统使用 etcd 存储所有数据,是最重要的组件之一,注意 etcd集群只能有奇数个节点(1,3,5...),本文档使用3个节点做集群. 一.基础环境 软件包 etcd下载地址:h ...

  10. Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)

    描述 axes在当前窗口中创建一个包含默认属性坐标系 axes('PropertyName',propertyvalue,...)创建坐标系时,同时指定它的一些属性,没有指定的使用DefaultAxe ...