当前位置: 首页 > 配置 > 正文

nginx实现php返回的图片内容缩放

研发的需求如下:用户访问的为一个带很多参数的jpg结尾的url,需要在nginx层rewrite为xxx.php?xxx形式,把参数传递给php处理。返回结果为一张图片,再根据此url中的参数做缩放,返回给用户。

实现过程中遇到几个问题,nginx如何实现proxy的缩放,各层缓存设置太小导致奇怪的413错误(图片很大,几M)。

第一次准备做到一个配置中,但是由于rewrite后缩放参数丢失,无法缩放,所以做了两层,一层代理一层缩放,清晰化整个配置文件。

第一层listen 80为缩放层:

server {
    server_name xxx.com;
    listen 80 ;

    proxy_buffer_size 64k;
    proxy_buffers 256 32k;
    #防止并发过大缓存不足,同时防止一次分配过多。
    proxy_busy_buffers_size 128k;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For  $remote_addr;

    location ~ /\w+/(\d+)_(\d+)_(\d+)x(\d+)_(\d+)_(\d+).jpg  {
         image_filter  resize - $6;        
         #resize支持以某一边缩放,不改变比例。另一边写“-”即可。
         image_filter_jpeg_quality 85;
         image_filter_buffer 20m;
         proxy_pass http://127.0.0.1:81;
    }
    location / {
         proxy_pass http://127.0.0.1:81;  
    }
}

第二层为listen 81端口,做rewrite

server {
    server_name xxx.com;
    listen 81 ;
    root  /home/www;

    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 32k;  
    #同理,设置缓存

    rewrite /\w+/(\d+)_(\d+)_(\d+)x(\d+)_(\d+)_(\d+).jpg  /get_image.php?vid=$1&interval=$2&cell=$3x$4&no=$5 ;
    #参数一个一个按照预先的数据格式取出来,传入php

    location ~* \.php$ {
        include   fastcgi more information.conf;
        fastcgi_index  index.php;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_connect_timeout 3;
        fastcgi_send_timeout 3;
        fastcgi_read_timeout 3;
   }
}

需要注意一点:在nginx主配置中加入

client_max_body_size 30m;

使nginx接受大数据包,否则会出现奇怪的413错误。

本文固定链接: https://www.cornercat.org/2013/05/nginx%e5%ae%9e%e7%8e%b0php%e8%bf%94%e5%9b%9e%e7%9a%84%e5%9b%be%e7%89%87%e5%86%85%e5%ae%b9%e7%bc%a9%e6%94%be/ | 墙角的小猫's Blog

该日志由 cornercat 于2013年05月13日发表在 配置 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: nginx实现php返回的图片内容缩放 | 墙角的小猫's Blog
关键字: , ,

nginx实现php返回的图片内容缩放:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter
欢迎光临~
柚子