在前面一篇文章中介绍了fastfds的简单安装和文件上传功能,以及使用fastdfs自带的http下载功能等;本文中将介绍如何使用fastdfs-apache-module模块整合fastdfs和apahce;整合完毕后,客户端访问apache,apache根据配置,使用fastdfs连接tracker查询相应组内可用的stroage服务器,最后完成http请求的重定向!因而建议在每台storage服务器上都配置fastdfs和apahce的整合,各个组间配置相应的虚拟主机,还可以在前端使用nginx做负载均衡来分配用户的请求。在开始之前,需要在storage服务器上安装好apache,本例中使用编译方式安装!

1:下载fastdfs-apache-module源码

   
   
   
   
  1. [root@www ~]# wget http://fastdfs.googlecode.com/files/fastdfs-apache-module_v1.08.tar.gz  
  2. [root@www ~]# tar -zxvf fastdfs-apache-module_v1.08.tar.gz  
  3. [root@www ~]# cd fastdfs-apache-module/src/ 

2:查看apache的编译路径和参数

   
   
   
   
  1. [root@www src]# /home/web/apache/bin/apachectl -V  
  2. Server version: Apache/2.2.17 (Unix)  
  3. Server built:   Apr  1 2011 06:11:57  
  4. Server's Module Magic Number: 20051115:25  
  5. Server loaded:  APR 1.4.2, APR-Util 1.3.10  
  6. Compiled using: APR 1.4.2, APR-Util 1.3.10  
  7. Architecture:   32-bit  
  8. Server MPM:     Prefork  
  9.   threaded:     no  
  10.     forked:     yes (variable process count)  
  11. Server compiled with....  
  12.  -D APACHE_MPM_DIR="server/mpm/prefork" 
  13.  -D APR_HAS_SENDFILE  
  14.  -D APR_HAS_MMAP  
  15.  -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)  
  16.  -D APR_USE_SYSVSEM_SERIALIZE  
  17.  -D APR_USE_PTHREAD_SERIALIZE  
  18.  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT  
  19.  -D APR_HAS_OTHER_CHILD  
  20.  -D AP_HAVE_RELIABLE_PIPED_LOGS  
  21.  -D DYNAMIC_MODULE_LIMIT=128 
  22.  -D HTTPD_ROOT="/home/web/apache" 
  23.  -D SUEXEC_BIN="/home/web/apache/bin/suexec" 
  24.  -D DEFAULT_PIDLOG="logs/httpd.pid" 
  25.  -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" 
  26.  -D DEFAULT_LOCKFILE="logs/accept.lock" 
  27.  -D DEFAULT_ERRORLOG="logs/error_log" 
  28.  -D AP_TYPES_CONFIG_FILE="conf/mime.types" 
  29.  -D SERVER_CONFIG_FILE="conf/httpd.conf" 

3:根据apache编译情况,修改makefile文件如下;在这里不要修改INCLUDES和LIBS参数,否则编译会报错,后面使用软连接实现!

   
   
   
   
  1. [root@www src]# grep -v '^#'  Makefile |grep -v '^$'  
  2. APACHE_BASE_PATH=/home/web/apache  
  3. builddir=.  
  4. top_srcdir=$(APACHE_BASE_PATH)  
  5. top_builddir=$(APACHE_BASE_PATH)  
  6. include $(APACHE_BASE_PATH)/build/special.mk  
  7. APXS=$(APACHE_BASE_PATH)/bin/apxs  
  8. APACHECTL=$(APACHE_BASE_PATH)/bin/apachectl  
  9. CFLAGS=-Wall  
  10. DEFS=-D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' 
  11. INCLUDES=-I/usr/local/include/fastdfs -I/usr/local/include/fastcommon/  
  12. LIBS=-L/usr/local/lib -lfastcommon -lfdfsclient  
  13. SH_LIBS=-lfastcommon -lfdfsclient  
  14. all: local-shared-build  
  15. install: install-modules-yes  
  16.         if [ ! -f /etc/fdfs/mod_fastdfs.conf ]; then cp mod_fastdfs.conf /etc/fdfs/; fi  
  17. clean:  
  18.         -rm -f mod_fastdfs.o mod_fastdfs.lo mod_fastdfs.slo mod_fastdfs.la   
  19. test: reload  
  20.         lynx -mime_header http://localhost/fastdfs  
  21. reload: install restart  
  22. start:  
  23.         $(APACHECTL) start  
  24. restart:  
  25.         $(APACHECTL) restart  
  26. stop:  
  27.         $(APACHECTL) stop 

4:对fastfds目录下的lib和include目录做软连接,这里出于个人习惯,喜欢把软件编译在/usr/local目录下,同时按软件名来做子目录

   
   
   
   
  1. [root@www src]# ln -s /usr/local/FastFDS/lib/libf* /usr/local/lib  
  2. [root@www src]# ln -s /usr/local/FastFDS/include/fastdfs /usr/local/include/  
  3. [root@www src]# ln -s /usr/local/FastFDS/include/fastcommon/ /usr/local/include/ 

5:编译安装

   
   
   
   
  1. [root@www src]# make  
  2. /home/web/apache/build/libtool --silent --mode=link gcc -g -O2 -pthread  -Wall       -lfastcommon -lfdfsclient -o   
  3.  
  4. mod_fastdfs.la -rpath /home/web/apache/modules -module -avoid-version  mod_fastdfs.lo  
  5.  
  6. [root@www src]# make install  
  7. /home/web/apache/build/libtool --silent --mode=install cp mod_fastdfs.la /home/web/apache/modules/  
  8. make[1]: Entering directory `/root/fastdfs-apache-module/src'  
  9. /home/web/apache/build/libtool --silent --mode=install cp mod_fastdfs.la /home/web/apache/modules/  
  10. make[1]: Leaving directory `/root/fastdfs-apache-module/src'  
  11. if [ ! -f /etc/fdfs/mod_fastdfs.conf ]; then cp mod_fastdfs.conf /etc/fdfs/; fi  
  12.  
  13. [root@www src]# ls /home/web/apache/modules/*fast*  
  14. /home/web/apache/modules/mod_fastcgi.so  
  15. /home/web/apache/modules/mod_fastdfs.so 

6:修改apache配置文件,让虚拟主机下的/M00所有请求都交给fastdfs模块处理

   
   
   
   
  1. [root@www src]# tail /home/web/apache/conf/httpd-vhosts.conf   
  2. #test fastdfs  
  3. LoadModule fastdfs_module modules/mod_fastdfs.so  
  4. <VirtualHost *:80> 
  5. Servername img.yang.com  
  6. <Location /M00> 
  7. sethandler fastdfs  
  8. Location> 
  9. VirtualHost> 

7:修改mod_fastdfs.conf文件,指定tracker服务器的ip和端口

   
   
   
   
  1. [root@www src]# grep -v '^#' /etc/fdfs/mod_fastdfs.conf  |grep -v '^$'  
  2. connect_timeout=2 
  3. network_timeout=30 
  4. base_path=/home/data/fastdfs  
  5. tracker_server=192.168.123.110:22122  
  6. storage_server_port=23000 
  7. group_name=group1 
  8. url_have_group_name = false 
  9. store_path_count=1 
  10. store_path0=/home/data/fastdfs  
  11. log_level=debug 
  12. log_filename=  
  13. response_mode=redirect  
  14. if_alias_prefix=  
  15. http.need_find_content_type=false 

8:测试

   
   
   
   
  1. [root@www src]# /home/web/apache/bin/apachectl -t  
  2. Syntax OK  
  3.  
  4. [root@www src]# /home/web/apache/bin/apachectl -k restart 

FastDFS同Apache的整合配置_第1张图片

FastDFS同Apache的整合配置_第2张图片

备注:
当apache服务器不为storage节点时,apache接受到的用户请求将会跳转!
[root@www fdfs]# tail -f /home/web/apache/logs/access_log
192.168.123.102 - - [01/Aug/2012:11:46:08 +0800] "GET /M00/00/00/wKh7FFAYiID1TnRyAAAA4VuHcSQ5892200 HTTP/1.1" 302 -

这个时候,若组内其他可用的storage服务器没有配置fastdfs同apache或者nginx的模块整合,则用户无法访问相应的资源,因而建议所有的storage服务器都进行整合,关于fastdfs同nginx的整合,可参考官方文档或自行google!
[root@www fdfs]# tail -f /home/web/apache/logs/error_log
[2012-08-01 11:46:08] DEBUG - file: common.c, line: 622, redirect to http://192.168.123.20/M00/00/00/wKh7FFAYiID1TnRyAAAA4VuHcSQ5892200?redirect=1