nginx集成FastDFS
一、前期准备
安装nginx和FastDFS,并保证能正常运行。
下载nginx和FastDFS的集成模块,fsatdfs-nginx-module_v1.16.tar.gz,存放到/usr/local/FastDFS目录下,并执行tar–zxvffsatdfs-nginx-module_v1.16.tar.gz解压.
二、集成
进入/usr/local/hjlc_file/nginx-1.6.2(这是nginx的源码路径,不是nginx的安装路径),执行configure进行配置,命令如下:
./configure --with-pcre=/usr/local/hjlc_file/pcre-8.38 --with-zlib=/usr/local/hjlc_file/zlib-1.2.7 --with-openssl=/usr/local/hjlc_file/ openssl-1.0.0a --add-module=/usr/local/FastDFS/fastdfs-nginx-module/src
上述命令成功执行后,再执行make进行编译(注意:这里不需要覆盖安装,不要执行makeinstall),编译过后,将源码目录中objs目录下的nginx复制到nginx安装目录的sbin下即可。
然后将fastdfs-nginx-module模块的src目录下的mod_fastdfs.conf文件复制到/etc/fdfs/目录下。
三、配置
配置mod_fastdfs.conf,修改以下信息:
#保存日志目录
base_path=/usr/local/FastDFS/logs
#tracker服务器的IP地址以及端口号
tracker_server=172.18.8.35:22122
#storage服务器的端口号
storage_server_port=23000
#文件url中是否有group名
url_have_group_name=true
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#存储路径,多个路径用1,2,3..来区分如store_path1,store_path2,store_path3
store_path0=/usr/local/fast_dfs_storage
配置好后,重启nginx和FastDFS。
配置/usr/local/nginx/conf/nginx.conf,通过url,将请求转到FastDFS的存储目录,
server { listen 13110; server_name 127.0.0.1; charset utf-8; location ~.*/M00 { root /usr/local/fast_dfs_storage/data/; ngx_fastdfs_module; } }
增加一个server节点,监听13110端口,FastDFS返回url格式为group1/M00/00/00/xxxx,location~.*/M00就是配置当遇到FastDFS请求时,访问存储目录。
四、java客户端开发
下载FastDFS的java客户端jar包fastdfs_client_v1.20.jar。
在项目中增加fdfs_client.conf配置文件,内容如下:
connect_timeout=2
network_timeout=30
charset=UTF-8
http.tracker_http_port=80
http.anti_steal_token=no
tracker_server=172.18.8.35:22122
Java代码:
//初始化(通过文件),忽略异常处理 String url = getClass().getResource("/fdfs_client.conf").getFile(); url = java.net.URLDecoder.decode(url,"utf-8"); ClientGlobal.init(url); 也可以通过自己设置参数来初始化,代码如下: //初始化(手动初始化参数) ClientGlobal.setG_connect_timeout(3000); ClientGlobal.setG_charset(“UTF-8”); ClientGlobal.setG_network_timeout(30000); ClientGlobal.setG_tracker_http_port(80); ClientGlobal.setG_anti_steal_token(false); InetSocketAddress[] group = new InetSocketAddress[1]; group[i] = new InetSocketAddress(“172.18.8.35”,22122); ClientGlobal.setG_tracker_group(new TrackerGroup(group)); //上传,忽略异常处理 String url = ""; TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = null; FileInputStream fis = null; trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient client = new StorageClient(trackerServer, storageServer); fis = new FileInputStream(file); byte[] file_buff = null; if(fis != null){ int len; len = fis.available(); file_buff = new byte[len]; fis.read(file_buff); } String[] result = null; result = client.upload_file(file_buff, FilenameUtils.getExtension(file.getName()), null); result为返回的参数result[0]为分组名,如group1,result[1]为目录地址:如/M00/00/00/XXXX //删除,忽略异常处理 TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = null; trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient1 client = new StorageClient1(trackerServer, storageServer); if(url.indexOf("/") == 0) { url = url.substring(1); } client.delete_file1(url);