fastdfs+nginx+image_filter安装与生成缩略图
fastdfs简介
- 类似google FS的一个轻量级分布式文件系统,纯C实现,支持linux、FreeBSD等UNIX系统;
- 只能通过API访问,不支持POXIS;
- 文件不分块存储,上传的文件和OS文件系统中的文件一一对应;
- 下载文件支持http协议,可以使用内置web server,配置nginx模块;
- 文件存储的适合范围:大于4KB,小于500M;
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。
Tracker Server:跟踪服务器,主要做调度工作,在访问上起到负载均衡的作用。在内存中记录集群中group和storage server的信息,是连接client和storage servery的枢纽。tracker性能是非常高的,二三台tracker就可以管理上百个group。
Storage Server:存储服务器,文件和文件属性都保存到存储服务器上。
所有的服务器是对等的,不存在mater-slave的关系,存储服务器采用分组的方式,同组之间文件完全相同,raid1。不同组storage server不会通信,是有storage server主动向tracker server报告状态,tracker server之间不会通信。
准备安装
1、环境准备
由于机器有限,我这使用二台服务器做实验,他们既做tracker,也做storage。
server01 IP:10.0.0.31
server02 IP:10.0.0.32
[root@nfs1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)
[root@nfs1 ~]# uname -r
3.10.-.el7.x86_64
[root@nfs1 ~]# getenforce
Disabled
[root@nfs1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
#注意:磁盘空间留多一些,不然storage会报错。
2、安装fastdfs
安装依赖
[root@nfs1 ~]# cd /usr/local/src/
[root@nfs1 ~]# git clone https://github.com/happyfish100/libfastcommon.git
[root@nfs1 ~]# cd libfastcommon/
[root@nfs1 ~]# ./make.sh
[root@nfs1 ~]# ./make.sh install
#make报错需要安装yum install gcc gcc-c++ make -y
安装fastdfs,这次用的版本是5.0.4
[root@nfs1 ~]# cd /usr/local/src/
[root@nfs1 ~]# wget https://github.com/happyfish100/fastdfs/archive/V5.04.tar.gz
[root@nfs1 ~]# tar xf V5..tar.gz
[root@nfs1 ~]# cd fastdfs-5.04/
[root@nfs1 ~]# ./make.sh
[root@nfs1 ~]# ./make.sh install
这个版本的坑(启动命令中路径不对):
[root@nfs1 ~]# sed -i 's#/usr/local/bin#/usr/bin#g' /etc/init.d/fdfs_trackerd
[root@nfs1 ~]# sed -i 's#/usr/local/bin#/usr/bin#g' /etc/init.d/fdfs_storaged
#需要将/usr/local/bin修改为/usr/bin
3、配置环境
tracker配置文件
[root@nfs1 ~]# cd /etc/fdfs/
[root@nfs1 ~]# cp tracker.conf.sample tracker.conf
[root@nfs1 ~]# mkdir /data/fdfs/tracker -p
[root@nfs1 ~]# vim tracker.conf
......
base_path=/data/fdfs/tracker
......
[root@nfs1 fdfs]# /etc/init.d/fdfs_trackerd start
storage配置文件
[root@nfs1 fdfs]# cd /etc/fdfs
[root@nfs1 fdfs]# mkdir /data/fdfs/storage/base -p
[root@nfs1 fdfs]# mkdir /data/fdfs/storage/store -p
[root@nfs1 fdfs]# cp storage.conf.sample storage.conf
[root@nfs1 fdfs]# vim storage.conf
...
base_path=/data/fdfs/storage/base
store_path0=/data/fdfs/storage/store
...
tracker_server=10.0.0.31:
tracker_server=10.0.0.32:
...
[root@nfs1 fdfs]# /etc/init.d/fdfs_storaged start
client配置文件
[root@nfs1 fdfs]# mkdir /data/fdfs/client
[root@nfs1 fdfs]# cp client.conf.sample client.conf
[root@nfs1 fdfs]# vim client.conf
...
base_path=/data/fdfs/client
tracker_server=10.0.0.31:
tracker_server=10.0.0.32:
...
好的,配置成功了,参数我在这里不解释了,可参看http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1941456&extra=page%3D1%26filter%3Ddigest%26digest%3D1
4、使用操作
[root@nfs1 fdfs]# /etc/init.d/fdfs_trackerd status
[root@nfs1 fdfs]# /etc/init.d/fdfs_storaged status
#在操作前我们可以看看这两个服务是不是起来了,如果没有起来,查看日志
[root@nfs1 fdfs]# tailf /data/fdfs/tracker/logs/trackerd.log
[root@nfs1 fdfs]# tailf /data/fdfs/storage/base/logs/storaged.log
##############我是分割线###################
[root@nfs1 fdfs]# fdfs_monitor /etc/fdfs/client.conf
server_count=, server_index= tracker server is 10.0.0.32: group count: Group :
group name = group1
disk total space = MB
disk free space = MB
trunk free space = MB
storage server count =
active server count =
storage server port =
storage HTTP port =
store path count =
subdir count per path =
current write server index =
current trunk file id = Storage :
id = 10.0.0.31
ip_addr = 10.0.0.31 (nfs1) ACTIVE
...
Storage :
id = 10.0.0.32
ip_addr = 10.0.0.32 ACTIVE
#上传文件测试
[root@nfs1 ~]# cd
[root@nfs1 ~]# fdfs_upload_file /etc/fdfs/client.conf /etc/resolv.conf
group1/M00///CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
#下载文件测试
[root@nfs1 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00///CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
[root@nfs1 ~]# ll
total
-rw-------. root root Mar : anaconda-ks.cfg
-rw-r--r-- root root Apr : CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
[root@nfs1 ~]# cat CgAAH1jexOiAKDWjAAAAMjpGoJk87.conf
# Generated by NetworkManager
nameserver 10.0.0.2
5、常用命令
#可以查看命令帮助
fdfs_upload_file
#上传文件
fdfs_upload_file /etc/fdfs/client.conf file
#下载文件
fdfs_download_file
#查看信息
fdfs_file_info
#删除文件
fdfs_delete_file
#添加追加文件
fdfs_upload_appender /etc/fdfs/client.conf appent.txt
#追加内容
fdfs_append_file /etc/fdfs/client.conf file_id appent2.txt
#监控状态
fdfs_monitor /etc/fdfs/client.conf
#所有的命令都是需要接上配置文件的。
安装nginx模块
我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块),其使用非常简单。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了10.0.0.31,文件ID已经返回客户端,这时,后台会将这个文件复制到10.0.0.32,如果复制没有完成,客户端就用这个ID在10.0.0.32取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
#fastdfs-nginx-module下载地址:链接:https://pan.baidu.com/s/1fngCkQeWKW6HiCdDwyRK8Q 密码:v85v
将下好的fastdfs-nginx-module模块上传至服务器,解压,然后安装nginx
1、查看nginx和fastdfs模块
[root@storege01- conf]# cd /usr/local/src/
[root@storege01- src]# ll
-rw-r--r-- root root Aug : fastdfs-nginx-module_v1..tar.gz
-rw-r--r-- root root Nov nginx-1.13..tar.gz
2、解压fastdfs模块及修改fastdfs模块的内容
[root@nfs1 ~]# tar xf fastdfs-nginx-module_v1..tar.gz
#需要修改 fastdfs-nginx-module/src/config ,
[root@nfs1 ~]# vim /usr/local/src/fastdfs-nginx-module/src/config #把 CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" 改为 CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
3、安装nginx依赖包
[root@nfs1 ~]# yum install -y pcre pcre-devel openssl openssl-devel gd-devel
4、编译nginx
[root@nfs1 tools]# tar xf nginx-1.8..tar.gz
[root@nfs1 tools]# cd nginx-1.8./
[root@nfs1 nginx-1.8.]# useradd -M -s /sbin/nologin www #没有用户的添加
[root@nfs1 nginx-1.8.]# ./configure --prefix=/usr/local/nginx-1.8. --user=www --group=www --with-http_ssl_module --with-http_image_filter_module --add-module=/usr/local/src/fastdfs-nginx-module/src/
[root@nfs1 nginx-1.8.]# make && make install 5、复制fastdfs配置文件
[root@nfs1 nginx-1.8.]# cd /usr/local/src/fastdfs-nginx-module/src
[root@nfs1 src]# cp mod_fastdfs.conf /etc/fdfs/
[root@nfs1 src]# cd /usr/local/src/fastdfs-5.04/conf/
[root@nfs1 conf]# cp anti-steal.jpg http.conf mime.types /etc/fdfs/ #日志文件 6、创建日志文件
[root@nfs1 ~]# touch /var/log/mod_fastdfs.log
[root@nfs1 ~]# chown www.www /var/log/mod_fastdfs.log
7、修改nginx配置文件
[root@nfs1 ~]# cd /usr/local/nginx/conf/
[root@nfs1 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf
[root@nfs1 conf]# vim nginx.conf
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name 10.0.0.31;
location /group1/M00 {
root /data/fdfs/storage/store/;
ngx_fastdfs_module;
}
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
} 8、修改配置文件后检查nginx配置及重启nginx
[root@nfs1 conf]# /usr/local/nginx/sbin/nginx -t
ngx_http_fastdfs_set pid=
[root@nfs1 conf]# vim /etc/fdfs/mod_fastdfs.conf
tracker_server=10.0.0.31:
tracker_server=10.0.0.32:
url_have_group_name = true
store_path0=/data/fdfs/storage/store/
log_filename=/var/log/mod_fastdfs.log
#重启Nginx
[root@nfs1 fdfs]# /usr/local/nginx/sbin/nginx -s stop
ngx_http_fastdfs_set pid=
[root@nfs1 fdfs]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=
nginx的http_image_filter_module模块说明
http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息。
http_image_filter_module模块的参数说明
image_filter off;
#关闭模块 image_filter test;
#确保图片是jpeg gif png否则返415错误 image_filter size;
#输出有关图像的json格式:例如以下显示{ "img" : { "width": , "height": , "type": "gif" } } 出错显示:{} image_filter rotate ||;
#旋转指定度数的图像,參数能够包括变量,单独或一起与resize crop一起使用。 image_filter resize width height;
#按比例降低图像到指定大小,公降低一个能够还有一个用"-"来表示,出错415,參数值可包括变量,能够与rotate一起使用,则两个一起生效。 image_filter crop width height;
#按比例降低图像比較大的側面积和还有一側多余的载翦边缘,其他和rotate一样。没太理解 image_filter_buffer 10M;
#设置读取图像缓冲的最大大小,超过则415错误。 image_filter_interlace on;
#假设启用,终于的图像将被交错。对于JPEG,终于的图像将在“渐进式JPEG”格式。 image_filter_jpeg_quality ;
#设置变换的JPEG图像的期望质量。可接受的值是从1到100的范围内。较小的值通常意味着既降低图像质量,降低数据传输,推荐的最大值为95。參数值能够包括变量。 image_filter_sharpen ;
#添加了终于图像的清晰度。锐度百分比能够超过100。零值将禁用锐化。參数值能够包括变量。 image_filter_transparency on;
#定义是否应该透明转换的GIF图像或PNG图像与调色板中指定的颜色时,能够保留。透明度的损失将导致更好的图像质量。在PNG的Alpha通道总是保留透明度。
再前面编译nginx已经制定了http_image_filter_module模块了,http_image_filter_module模块依赖gd-devel包所以需要安装gd-devel包(前面也已经安装了)
nginx实现图片缩略图的配置如下:
# cat /usr/local/nginx/conf/nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;
worker_processes auto;
error_log /usr/local/nginx/logs/error.log;
pid /run/nginx.pid; /usr/share/nginx/README.dynamic. events {
worker_connections ;
} http {
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 /usr/local/nginx/logs/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
types_hash_max_size ; include /usr/local/nginx-1.13./conf/mime.types;
default_type application/octet-stream; server {
listen ;
server_name localhost;
root /data/nginx/resource;
location ~* \.(eot|ttf|woff|woff2|svg|otf)$ {
root /data/nginx/resource/;
add_header Access-Control-Allow-Origin *;
}
location static/* {
root /data/nginx/resource/;
}
location ~ group1/M00/(.+)_([0-9]+)x([0-9]+)\.(jpg|gif|png) { #这段往下为生成缩略图的配置
alias /data0/fastdfs/storage/storage0/data;
ngx_fastdfs_module;
set $w $2;
set $h $3; if ($w != "0") {
rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ group1/M00$1.$4 break;
} if ($h != "0") {
rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ group1/M00$1.$4 break;
} image_filter resize $w $h; image_filter_buffer 2M; try_files group1/M00$1.$4 $1.jpg;
} location ~ group1/M00/(.+)\.?(.+){
alias /data0/fastdfs/storage/storage0/data;
ngx_fastdfs_module;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
配置后重启nginx!!!
# /usr/local/nginx/sbin/nginx -s reload
往fastdfs中上传图片
# fdfs_upload_file /etc/fdfs/client.conf test.png
group1/M00///wKgCEVvGzDSAJROvAAHgQeZ5IGY364.png
访问图片
1、访问原图:www.71net.com/group1/M00/00/00/wKgCEVvGzDSAJROvAAHgQeZ5IGY364.png
其中www.71net.com为你的域名或IP地址
2、访问缩略图
fastdfs+nginx+image_filter安装与生成缩略图的更多相关文章
- 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...
- nginx实现本地图片生成缩略图
nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...
- centos 系统下安装FastDFS+nginx+fastdfs-nginx-module安装配置
前言: 以前的项目上传的文件都是保存到本地或者是局域网内的共享文件夹下,由于数据量,服务器的负载均衡(分机的某些图片无法访问的问题处理)等因素的情况下,就想到用fastdfs来文件管理,花了几天时间硬 ...
- fastdfs+nginx的安装部署
原理图: fastdfs适用场景: fastdfs特别适合海量 中小文件(建议范围:4KB< file_size <500MB)为载体的在线服务. 安装系统介绍: CentOS6.6 安装 ...
- 【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!
写在前面 今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的.起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题.还别说,就 ...
- 转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合
转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合 http://blog.csdn.net/CleverCode/article/details/522 ...
- nginx利用image_filter动态生成缩略图
转自:http://www.nginx.cn/2160.html "我如今是有些图片须要生成缩略图.这个如今加了image_filter这个已经实现了.但我不知道怎么样才干訪问我上传的原图& ...
- nginx 生成 缩略图 and 生成缩略图到硬盘
nginx 编译的时候增加 ./configure --with-http_image_filter_module 配置如下 server { listen 80; server_name ...
- FastDFS + Nginx 安装
1.安装FastDFS依赖lib包 cd /usr/local/src/ git clone https://github.com/happyfish100/libfastcommon.git cd ...
随机推荐
- NPOI下载
.吐槽NPOI下载 众所周知我们用NPOI第三方程序集主要的目的就是为了能快捷的操作Excel,但是现在不论是官网(https://archive.codeplex.com/?p=npoi)还是git ...
- ASP.Net GridView 基础
SP.NET 在开发过程中经常使用的微软提供的服务器控件(GridView),但在开发中很少使用界面化来操作.导致了有点不太会使用界面化操作了,还有就是一些不经常使用的属性也没什么印象了,在网上找了好 ...
- PAT——1050. 螺旋矩阵
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...
- How RTT works
13.2 How RTT works 13.2.1 Target implementation Real Time Terminal uses a SEGGER RTT Control Block s ...
- Git IDEA Move or commit them before merge
提交代码遇到这个问题. Move or commit them before merge 百度了一下都是在Gitbash 中敲命令. 在团队协作中 你总不能去敲命令吧 后来在组长的怂恿下,我删除了一个 ...
- 一个input输入内容监听联动的demo
两个input,一个在其中一个输入,内容在另一个input中实时回显 代码如下 <!DOCTYPE html> <html> <head> <title> ...
- Archlinux+gnome安装中文输入法
环境:archlinux+gnome 1.首先需要配置Archlinuxcn源 打开/etc/pacman.conf,添加 [archlinuxcn] Server = https://mirrors ...
- 使用for in 循环数据集
在DELPHI没有FOR IN的语法时,我们要使用如下代码枚举数据集中的每个内容: cds.First; while not cds.eof do begin ... cds.Next; end; 最 ...
- java爬虫爬取网页内容前,对网页内容的编码格式进行判断的方式
近日在做爬虫功能,爬取网页内容,然后对内容进行语义分析,最后对网页打标签,从而判断访问该网页的用户的属性. 在爬取内容时,遇到乱码问题.故需对网页内容编码格式做判断,方式大体分为三种:一.从heade ...
- Cloudera Manager 安装集群遇到的坑
Cloudera Manager 安装集群遇到的坑 多次安装集群,但每次都不能顺利,都会遇到很多很多的坑,今天就过去踩过的坑简单的总结一下,希望已经踩了的和正在踩的童鞋能够借鉴一下,希望对你们能有所帮 ...