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 ...
随机推荐
- 如何弹出WiFi提示列表。
如果你的程序中用到了WiFi,想在没有有效WiFi的时候出现如图所示的提示该怎么做? 其实很简单, 只需要在Info.plist中添加如下Key/Value UIRequiresPersistentW ...
- CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯
/* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include <ti/sysbios/knl/Task.h& ...
- Datatable报错Uncaught TypeError: Cannot read property 'cell' of undefined
使用Datatables时,报出错误 仔细想想,是因为我在columns里加入了id,并设置visible:false 但是却没在下面的HTML部分多加一个 th 虽然我觉得因为id是隐藏的,不用加上 ...
- 设置PL/SQL Developer 字符集
本文转自:http://blog.itpub.net/26613085/viewspace-765429/ 适用于:客户端和服务端不一致的情况,或者客户端某个字段的值乱码
- Docker 常用命令——镜像
Docker 常用命令 帮助命令 docker version --版本信息 docker info --详细信息 docker --help --帮助 镜像命令 1.doc ...
- java 加载并读取Properties 文件
1 .系统自带的application.properties (以下代码仅供参考,不能粘贴复制) 假设application.properties文件有下面两个值: come.test.name = ...
- c++读取ini的Section节名
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include "iostream&q ...
- Spark Streaming核心概念与编程
Spark Streaming核心概念与编程 1. 核心概念 StreamingContext Create StreamingContext import org.apache.spark._ im ...
- Leetcode---栈系列刷题(python3实现)----#20有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- 白帽子讲web安全——认证与会话管理
在看白帽子讲web安全,刚好看到认证与会话管理:也就是我们在平常渗透测试中遇到最多的登录页面,也即是用户名和密码认证方式,这是最常见的认证方式. 了解两个概念:认证和授权 1):认证的目的是为了认出用 ...