nginx+lua_nginx+GraphicsMagick生成实时缩略图
暂做笔记,带后续验证通过后,再补充 1、2、3 步。
一、安装 lua
首先确认是否安装 readline
- yum -y install readline-devel ncurses-devel
进入页面:http://www.lua.org/download.html
- wget http://www.lua.org/ftp/lua-5.3.1.tar.gz
- tar zxvf lua-5.3..tar.gz
- #进入解压目录
- make linux && make install
- wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
- tar zxvf LuaJIT-2.0..tar.gz
- cd LuaJIT-2.0.
- make && make install
- ln -s /usr/local/lib/libluajit-5.1.so. /lib64/libluajit-5.1.so.
- export LUAJIT_LIB=/usr/local/lib
- export LUAJIT_INC=/usr/local/include/luajit-2.0/
二、安装 GraphicsMagick
进入页面:http://www.graphicsmagick.org/1.3/download.html
- tar zxvf GraphicsMagick-1.3..tar.gz
- cd GraphicsMagick-1.3.
- ./configure --prefix=/usr/local/graphicsmagick
make && make install- #验证
/usr/local/graphicsmagick/bin/gm version
三、安装nginx
进入页面:http://tengine.taobao.org/opensource_cn.html
- ./configure --prefix=/usr/local/nginx \
- --dso-path=/usr/local/nginx/modules \
- --with-http_realip_module \
- --with-http_gzip_static_module \
- --with-http_stub_status_module \
- --with-http_concat_module \
- --with-http_lua_module \
- --with-pcre=/usr/local/src/pcre-8.37\
- --with-zlib=/usr/local/src/zlib-1.2.\
- --with-openssl=/usr/local/src/openssl-1.0.0s\
- --http-proxy-temp-path=/var/tmp/nginx/proxy_temp \
- --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp \
- --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp \
- --http-scgi-temp-path=/var/tmp/nginx/cgi_temp \
- --http-client-body-temp-path=/var/tmp/nginx/client_body_temp \
- --http-log-path=/var/log/nginx/access.log \
- --error-log-path=/var/log/nginx/error.log\
- --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
- make && make install
- #启动nginx
- #测试配置文件
- /usr/local/nginx/sbin/nginx -t
- #启动
- /usr/local/nginx/sbin/nginx
设置开机启动
- vi /etc/rc.d/init.d/nginx
- #!/bin/bash
- # Tengine Startup script# processname: nginx
- # chkconfig: -
- # description: nginx is a World Wide Web server. It is used to serve
- # pidfile: /var/run/nginx.pid
- # config: /usr/local/nginx/conf/nginx.conf
- nginxd=/usr/local/nginx/sbin/nginx
- nginx_config=/usr/local/nginx/conf/nginx.conf
- nginx_pid=/usr/local/nginx/logs/nginx.pid
- RETVAL=
- prog="nginx"
- # Source function library.
- . /etc/rc.d/init.d/functions
- # Source networking configuration.
- . /etc/sysconfig/network
- # Check that networking is up.
- [ ${NETWORKING} = "no" ] && exit
- [ -x $nginxd ] || exit
- # Start nginx daemons functions.
- start() {
- if [ -e $nginx_pid ];then
- echo "tengine already running...."
- exit
- fi
- echo -n $"Starting $prog: "
- daemon $nginxd -c ${nginx_config}
- RETVAL=$?
- echo
- [ $RETVAL = ] && touch /var/lock/subsys/nginx
- return $RETVAL
- }
- # Stop nginx daemons functions.
- stop() {
- echo -n $"Stopping $prog: "
- killproc $nginxd
- RETVAL=$?
- echo
- [ $RETVAL = ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
- }
- reload() {
- echo -n $"Reloading $prog: "
- #kill -HUP `cat ${nginx_pid}`
- killproc $nginxd -HUP
- RETVAL=$?
- echo
- }
- # See how we were called.
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- reload)
- reload
- ;;
- restart)
- stop
- start
- ;;
- status)
- status $prog
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $prog {start|stop|restart|reload|status|help}"
- exit
- esac
- exit $RETVAL
保存退出
- chmod /etc/rc.d/init.d/nginx #赋予文件执行权限
- chkconfig --level nginx on #设置开机启动
- service nginx start
四、配置 nginx
nginx.conf
- http
- {
- lua_package_path '/usr/local/openresty/nginx/lua/?.lua;;';
- server {
- listen ;
- server_name img.rhythmk.org;
- root /home/wwwroot/static/image;
- #对类似_100x100.gif/jpg/png/jpeg进行缩略图处理
- location ~* _([-]+)x([-]+)\.(gif|jpg|png|jpeg)$ { #匹配文件名规则
- root /home/wwwroot/static/image; #站点根目录
- set $image_root /home/wwwroot/static/image; #图片目录
- set $thumbnail_root /home/wwwroot/static/thumbnail; #缩略图存放目录
- #如果缩略图文件存在,直接返回
- set $file $thumbnail_root$uri;
- if (-f $file) {
- rewrite ^/(.*)$ /thumbnail/$ last;
- }
- #如果缩略图文件不存在,则应用缩略图模块处理
- if (!-f $file) {
- rewrite_by_lua_file lua/thumbnail.lua;
- }
- }
- }
- #include conf/*.conf;
- }
lua/thumbnail.lua
- local index = string.find(ngx.var.uri, "([0-9]+)x([0-9]+)");
- local originalUri = string.sub(ngx.var.uri, , index-);
- local area = string.sub(ngx.var.uri, index);
- index = string.find(area, "([.])");
- area = string.sub(area, , index-);
- local image_sizes = {"80x80", "800x600", "40x40"};
- function table.contains(table, element)
- for _, value in pairs(table) do
- if value == element then
- return true
- end
- end
- return false
- end
- if table.contains(image_sizes, area) then
- local command = "gm convert " .. ngx.var.image_root .. originalUri .. " -thumbnail " .. area .. " -background gray -gravity center -extent " .. area .. " " .. ngx.var.file;
- os.execute(command);
- ngx.req.set_uri(ngx.var.uri, true);
- else
- ngx.exit();
- end;
nginx+lua_nginx+GraphicsMagick生成实时缩略图的更多相关文章
- Nginx+lua_Nginx+GraphicsMagick来实现实时缩略图
1.安装GraphicsMagick cd /usr/local/src wget http://sourceforge.net/projects/graphicsmagick/files/graph ...
- 转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合
转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合 http://blog.csdn.net/CleverCode/article/details/522 ...
- c#.net 生成清晰缩略图
1 public void imgsize() 2 { 3 //本例中假定了两个变量: 4 5 String src = "c:/myImages/a.jpg"; //源图像文件的 ...
- ASP.NET根据URL生成网页缩略图示例程序(C#语言)
工作中可能马上要用到根据URL生成网页缩略图功能,提前做好准备. 在网上找了份源码,但是有错误:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a ...
- 利用FFmpeg生成视频缩略图 2.3.1
1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/builds/win32/static/ ...
- 利用FFmpeg生成视频缩略图 2.1.8
1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/builds/win32/static/ ...
- 利用FFmpeg生成视频缩略图 2.1.6
利用FFmpeg生成视频缩略图 1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/build ...
- PHP一般情况下生成的缩略图都比较不理想
PHP用GD库生成高质量的缩略图片,PHP一般情况下生成的缩略图都比较不理想.今天试用PHP,GD库来生成缩略图.虽然并不100%完美.可是也应该可以满足缩略图的要求了.<?php $FILEN ...
- NGINX按天生成日志文件的简易配置
NGINX按天生成日志文件的简易配置 0x01 最近后端童鞋遇到一个小需求,拆分nginx生成的log文件,最好是按天生成,看着她还有很多bug待改的状态,我说这个简单啊,我来吧.曾经搞node后端的 ...
随机推荐
- [C++] C/C++ 取整函数ceil(),floor()
使用floor函数.floor(x)返回的是小于或等于x的最大整数.如: floor(10.5) == 10 floor(-10.5) == -11 使用ceil函数.ceil(x)返回 ...
- [游戏学习22] MFC 井字棋 双人对战
>_<:太多啦,感觉用英语说的太慢啦,没想到一年做的东西竟然这么多.....接下来要加速啦! >_<:注意这里必须用MFC和前面的Win32不一样啦! >_<:这也 ...
- jquery 判断手势滑动方向(上下左右)
$('body').on('click', '.placeholder img', function(e) { //touchstart在你之前发生,不管些什么,都先执行下面的 }); $('body ...
- paip.Log4j配置不起作用的解决
paip.Log4j配置不起作用的解决 1.jar包里的log4j配置 看累挂jar,真的有个" webservices-rt.jar\com\sun\org\apache\xml\inte ...
- SAFS Init Files
There're many deployment files for configuration. We need to learn how SAFS read these depolyment fi ...
- Cause for NullPointerException android.support.v7.widget.RecyclerView.onMeasure
because you have not set LinearLayoutManager to RecyclerView. for example: mRecyclerView = (Recycler ...
- c#之第一课入门
这几天看到微软的build大会,感觉微软不甘落后他人,曾经的巨头难道又要重新崛起,不管了,为了以后的饭碗,还是简单学习一些c#吧,有时这种紧张感不错的,现在由于这种紧张感,我已经掌握的java(主要弄 ...
- ios之VFL的补充(二)
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[languageI ...
- 采用TL026等构成的宽带ALC放大器电路图
Building a Differential Amplifier An op-amp with no feedback is already a differential amplifier, am ...
- Spring和cxf3的整合,以maven的方式
一.引入cxf3 我这里使用的是最新的版本cxf3.1.8 引入cxf3需要在pom.xml加入如下内容: <dependency> <groupId>org.apache.c ...