nginx+lua+GraphicsMagick实现图片自动缩放功能(强烈推荐)

详细配置步骤:
lua+nginx+GraphicsMagick 

环境: CentOSsh5.4_x64.iso 

虚拟机: Vmware9.0

yum install readline-devel pcre-devel openssl-devel
cd /opt/Source
wget http://agentzh.org/misc/nginx/ngx_openresty-1.0.15.10.tar.gz
useradd -r www
tar vxzf ngx_openresty-1.0.15.10.tar.gz 
cd ngx_openresty-1.0.15.10
./configure --user=www --group=www --prefix=/usr/local/openresty \
            --with-luajit \
            --without-http_redis2_module \
            --with-http_iconv_module 
make -j4   # -j后面的cpu核心数,如果是多核可以写相应的个数
make install
 
  安装jpg环境:

tar xf libjpeg-6b.tar.gz
./configure 
make && make install 

tar xf libpng-1.4.7.tar.gz

./configure
make && make install 
注意: 64位系统需要拷贝
cp /usr/local/lib/libpng14.so.14 /lib64/   或者做软连接,不然执行gm命令的时候会报错!
   
cd   /opt/Source 
wget http://downloads.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.16/GraphicsMagick-1.3.16.tar.gz
tar vxzf GraphicsMagick-1.3.16.tar.gz 
cd GraphicsMagick-1.3.16
./configure
make&& make install

配置nginx nginx.conf
#user   nobody;
worker_processes   1;
#error_log   logs/error.log;
#error_log   logs/error.log   notice;
#error_log   logs/error.log   info;
#pid         logs/nginx.pid;
events {
    worker_connections   1024;
}
http {
    include       mime.types;
    default_type   application/octet-stream;


    #log_format   main   '$remote_addr - $remote_user [$time_local] "$request" '
    #                   '$status $body_bytes_sent "$http_referer" '
    #                   '"$http_user_agent" "$http_x_forwarded_for"';


    #access_log   logs/access.log   main;


    sendfile         on;
    #tcp_nopush     on;


    #keepalive_timeout   0;
    keepalive_timeout   65;


    #gzip   on;


    server {
        listen       80;
        server_name   localhost;


        #charset koi8-r;


        #access_log   logs/host.access.log   main;


        location / {
            root   html;
            index   index.html index.htm;
        }
location /lua1 {
  default_type 'text/plain';
                    rewrite_by_lua 'ngx.say("hello, lua")';
                }
location /upload/   {
                set $image_root /usr/local/openresty/nginx/html;
                set $file "$image_root$uri";
                if (!-f $file) {
                        rewrite_by_lua '
                                local index = string.find(ngx.var.uri, "([0-9]+)x([0-9]+)");
                                if (index == nil) then
                                    ngx.exit(404);end;
                                local originalUri = string.sub(ngx.var.uri, 0, index-2);
                                local area = string.sub(ngx.var.uri, index);
                                index = string.find(area, "([.])");
                                area = string.sub(area, 0, index-1);
                                local image_sizes = {"160x160","400x300"};
                                local image_big = {"80x60^", "120x90^", "160x120^"};
                                function table.contains(table, element)
                                for _, value in pairs(table) do
                                        if value == element then
                                                return true
                                        end
                                end
                                return false
                        end
                print(table.contains(image_big, area))
                if table.contains(image_big, area) then
                        local command = "gm convert " .. ngx.var.image_root ..   originalUri   .. " -thumbnail " .. area .. " -background gray -gravity center -extent " .. area .. " " .. ngx.var.image_root .. ngx.var.uri
                        os.execute(command);
                else
                        if table.contains(image_sizes, area) then
                        local command = "gm convert " .. ngx.var.image_root ..   originalUri   .. " -thumbnail "   .. area .. " " .. ngx.var.image_root .. ngx.var.uri;
                        os.execute(command);
                        else
                        ngx.exit(404);
                        end;
                end;
                ';
        }
        }
#error_page   404               /404.html;


        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504   /50x.html;
        location = /50x.html {
            root   html;
        }


        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #     proxy_pass   http://127.0.0.1;
        #}


        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #     root           html;
        #     fastcgi_pass   127.0.0.1:9000;
        #     fastcgi_index   index.php;
        #     fastcgi_param   SCRIPT_FILENAME   /scripts$fastcgi_script_name;
        #     include         fastcgi_params;
        #}


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #     deny   all;
        #}
    }




    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #     listen       8000;
    #     listen       somename:8080;
    #     server_name   somename   alias   another.alias;
    #     location / {
    #         root   html;
    #         index   index.html index.htm;
    #     }
    #}




    # HTTPS server
    #
    #server {
    #     listen       443;
    #     server_name   localhost;


    #     ssl                   on;
    #     ssl_certificate       cert.pem;
    #     ssl_certificate_key   cert.key;


    #     ssl_session_timeout   5m;


    #     ssl_protocols   SSLv2 SSLv3 TLSv1;
    #     ssl_ciphers   HIGH:!aNULL:!MD5;
    #     ssl_prefer_server_ciphers   on;


    #     location / {
    #         root   html;
    #         index   index.html index.htm;
    #     }
    #}


}


注意: 要建立路径
mkdir /usr/local/openresty/nginx/html/upload


给定写权限:
chmod o+w /usr/local/openresty/nginx/html/upload


拷贝测试图片:
cp test.jpg   /usr/local/openresty/nginx/html/upload/test.jpg


测试nginx语法:
/usr/local/openresty/nginx/sbin/nginx   -t


启动nginx
/usr/local/openresty/nginx/sbin/nginx  
netstat -tunlp |grep :80




客户端浏览器测试:
http://Server_ip/upload/test.jpg   : 查看原图
http://Server_ip/upload/test.jpg.160x160.jpg   :查看缩放图




注意事项:
本文档关闭了selinux ,同时放行了80端口。


配置有问题可以查看nginx的错误日志文件!
tail -f /usr/local/openresty/nginx/logs/error.log 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值