FastDFS的Nginx配置

发表时间:2018-04-10 14:21:49 浏览量( 56 ) 留言数( 0 )

学习目标:

1、掌握FastDFS的作为文件服务提供http访问

2、掌握FastDFS的作为文件服务的其他配置


学习过程:

一、niginx的配置


https://blog.csdn.net/zxl315/article/details/53537628

   如果需要用浏览器访问该图片,就需要nginx来做反向代理,直接访问是不行的。你可以看一下京东的网站的图片路径,可以看到就是一个文件服务器的路径,基本都是直接使用http访问文件服务器的图片的。如果我们也想通过浏览器访问文件服务器的资源,比如这样:

   http://192.168.3.102:8888/group1/M00/00/00/wKgDZlrXamWAKEa0AAA2j-z2qsA922.jpg

   

   在192.168.3.102和192.168.3.103两台服务器上面安装nginx,并进行相关的配置,才可以直接通过浏览器访问该资源,但是这里有一个问题:同组存储服务器之间需要进入文件复制,有同步延迟的问题,如果 Tracker服务器将文件上传到了192.168.3.102,上传成功后文件 ID 已经返回给客户端,这个时候如果客户访问的是192.168.3.103,如果文件比较大,还没有同步完成就会出现访问失败的问题。而 fastdfs-nginx-module 模块可以重定向文件连接到源服务器取文件,避免这个访问错误的问题。

使用nginx是为了可以通过浏览器访问该图片,因为不能直接访问的。和fastdfs-nginx-module插件是不一样的功能。


我们只需要在192.168.3.102和192.168.3.103两台存储服务器上面安装就可以了。

1、解压

tar zxf fastdfs-nginx-module_v1.16.tar.gz


2、

修改 fastdfs-nginx-module 的 config 配置文件


# cd 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/"

这个路径是必须要修改的,不然在 nginx 编译的时候会报错的

使用命令

sed -i 's/\/usr\/local\/include/\/usr\/include/g' config


3、安装nginx

mv  nginx-1.6.2.tar.gz /usr/local/

cd /usr/local

tar -zxf nginx-1.6.2.tar.gz

cd nginx-1.6.2

./configure --add-module=/root/fastDFS/fastdfs-nginx-module/src

make && make install


4、复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改

 cd fastdfs-nginx-module/src

 cp mod_fastdfs.conf /etc/fdfs/

  修改配置内容

vim /etc/fdfs/mod_fastdfs.conf

connect_timeout=20

tracker_server=192.168.3.101:22122

storage_server_port=23000

group_name=group1   #组名

url_have_group_name = true  #是否使用组名

store_path0=/fastdfs/storage


5、复制 FastDFS 的部分配置文件到/etc/fdfs 目录 

cd /root/fastDFS/FastDFS/conf

cp http.conf mime.types /etc/fdfs/

配置http.conf中有防盗链的,可以根据需要配置一下,:

http.anti_steal.check_token=true

http.anti_steal.token_ttl=900

http.anti_steal.secret_key=FastDFSSecretKey001

http.anti_steal.token_check_fail=/data/fastdfs/img/anti-steal.jpg

具体意义:

http.anti_steal.check_token:是否开启防盗链,默认为false

http.anti_steal.token_ttl:防盗链token的有效时长

http.anti_steal.secret_key:生成token的密钥

http.anti_steal.token_check_fail:如果是防盗链,需要展示的图片路径


6、

ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00


7、nginx.conf的配置

user root

cd  /usr/local/nginx/conf

vim nginx.conf

        listen       8888;


        location ~/group([0-9])/M00 {

              ngx_fastdfs_module;

        }



A、8888 端口值是要与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应, 因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。

B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:

     location ~/group([0-9])/M00 {

         ngx_fastdfs_module;

}

C、如查下载时如发现启动报错,可以尝试一下将 nginx.conf 第一行

    #user nobody 修改为 

    user root 后重新启动。



8、启动

cd /usr/local/nginx/sbin/

[root@localhost sbin]# ./nginx 

ngx_http_fastdfs_set pid=3860


检查是否正常开启

[root@localhost sbin]# netstat -ano|grep 8888

tcp        0      0 0.0.0.0:8888                0.0.0.0:*                   LISTEN      off (0.00/0/0)

也可以使用浏览器

http://192.168.3.102:8888/


设置开机启动

vi /etc/init.d/nginx


输入一下内容

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# config:      /usr/local/nginx/sbin/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -z "`grep $user /etc/passwd`" ]; then
       useradd -M -s /bin/nologin $user
   fi
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
force_reload() {
    restart
}
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
    status $prog
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

修改权限

chmod a+x /etc/init.d/nginx

设置开启启动

 vi /etc/rc.local

/etc/init.d/nginx start 


测试上传一个jpg图片

	@Test
	public void testuploadFile() {
		File file = new File("d://test.jpg");
		String result = FastDFSClient.uploadFile(file, "jpg");
		System.out.println(result);
	}

返回值:


使用http访问

group1/M00/00/00/wKgDZlrXamWAKEa0AAA2j-z2qsA922.jpg


可以看到fastdfs-nginx-module插件还是非常强大的,上传成功到group1的文件

http://192.168.3.102:8888/group1/M00/00/00/wKgDZlrXamWAKEa0AAA2j-z2qsA922.jpg

http://192.168.3.103:8888/group1/M00/00/00/wKgDZlrXamWAKEa0AAA2j-z2qsA922.jpg