Welcome everyone

fastdfs 安装配置nginx

java 汪明鑫 80浏览 0评论

要实现的效果

 

通过外网http可以访问到存储在fastdfs上的文件

 

nginx介绍

Nginx是俄罗斯人编写的一款高性能的HTTP和反向代理服务器,在高连接并发的情况下,它能够支持高达50000个并发连接数的响应,但是内存、CPU等系统资源消耗却很低,运行很稳定。目前Nginx在国内很多大型企业都有应用,据最新统计,Nginx的市场占有率已经到33%左右了。而Apache的市场占有率虽然仍然是最高的,但是是呈下降趋势。而Nginx的势头很明显。选择Nginx的理由也很简单:第一,它可以支持5W高并发连接;第二,内存消耗少;第三,成本低,如果采用F5、NetScaler等硬件负载均衡设备的话,需要大几十万。而Nginx是开源的,可以免费使用并且能用于商业用途。

 

在 storage server 上安装 nginx 的目的是对外通过 http 访问 storage server 上的文 件。使用 nginx 的模块
FastDFS-nginx-module 的作用是通过 http 方式访问 storage 中 的文件,当 storage 本机没有要找的文件时向源
storage 主机代理请求文件。

 

参考资料

整个安装配置nginx的过程较繁琐,容易出现一些坑

我也不是很明确具体的配置步骤

瞎捣鼓后来可以了

 

可以参考下面的链接:

https://www.cnblogs.com/Eivll0m/p/5378328.html

https://blog.csdn.net/u013378306/article/details/74852294

 

 

nginx安装配置

nginx需要添加fastdfs-nginx-module模块。
安装过程中可能会出现的问题
缺少pcre的依赖
缺少openssl的依赖
yum install pcre-devel
yum install openssl-devel
yum install zlib-devel

上面这三个我都装了

nginx的下载可以直接去官网
fastdfs-nginx-module下载地址: http://nchc.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz

 

# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure --prefix=/data/nginx --add-module=/data/soft/fastdfs-nginx-module/src
make
make install

 

make的时候如果报错:

 

可以参考下面的解决方法:(参考不是直接这样配,根据你的fastdfs的数据和日志路径,真实ip,暴露的端口号,分组的个数)
解决办法:

执行以下2条命令,然后重新make
# ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
# ln -sv /usr/include/fastdfs /usr/local/include/fastdfs

拷贝相关文件到/etc/fdfs目录下:
# cp /data/soft/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# cp /data/soft/FastDFS/conf/mime.types /etc/fdfs/
# cp /data/soft/FastDFS/conf/http.conf /etc/fdfs/
# cp /data/soft/FastDFS/conf/anti-steal.jpg /etc/fdfs/

修改nginx.conf的配置:
listen       9999;
location ~/group[1-3]/M00 {
            root /data/fastdfs-storage/data;
            ngx_fastdfs_module;
        }

修改/etc/fdfs/mod_fastdfs.conf的配置:
base_path=/data/fastdfs-storage  #保存日志目录
tracker_server=192.168.116.145:22122  #tracker 服务器的 IP 地址以及端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/data/fastdfs-storage # 存储路径
http.need_find_content_type=true  # 从文件扩展名查找文件类型 (nginx 时 为true)
group_count = 3  #设置组的个数,事实上这次只使用了group1
在文件末添加如下内容:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs-storage

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs-storage

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs-storage

建立 M00 至存储目录的符号连接:
# ln -s /data/fastdfs-storage/data /data/fastdfs-storage/data/M00

启动nginx:
# /data/nginx/sbin/nginx

由于我只在一台服务器上搞fastdfs,group_count = 1 ,再在文末追加[group1]即可

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/fdfs_storage
#store_path1=/home/yuqing/fastdfs1

 

 

nginx配置文件

我这里监听的端口号是80,这样在浏览器输入url,不用加端口号,默认的是80

除此之外tracker的配置文件  tracker.conf  配置http端口  http.server_port=80

 

启动nginx   -c后面跟的就是nginx的配置文件

./nginx -c /usr/local/nginx/conf/nginx-fastdfs.conf 

 

访问 http://ip/group1/M00/00/00/rBGcalylpKGAZRzMAABHEBghxQ4101.jpg
结果404

 

查看nginx错误日志
cat /usr/local/nginx/logs/error.log 

或者

tail -f  /usr/local/nginx/logs/error.log 

 

[2019-04-09 10:46:30] ERROR – file: ../common/fdfs_global.c, line: 52, the format of filename “group1/M00/00/00/rBGcalylpKGAZRzMAABHEBghxQ4101.jpg” is invalid

 

 

修改后再重新启动fastdfs和nginx就可以了

 

 

再体验

 //上传文件
    @Test
    public void testUpload() throws IOException, MyException {

        //加载配置文件
        ClientGlobal.initByProperties("config/fastdfs-client.properties");

        //创建TrackerClient
        TrackerClient trackerClient = new TrackerClient();

        //连接tracker
        TrackerServer trackerServer = trackerClient.getConnection();

        //获取storage
        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);

        //创建TrackerClient
        StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);

        //上传文件
        String filePath = "e:/a.txt";
        String fileId = storageClient1.upload_file1(filePath, "txt", null);  //上传成功后得到的id
        System.out.println("fileId : "+fileId);

    }

上传一个文本文件

 

通过外网http访问

 

转载请注明:汪明鑫的个人博客 » fastdfs 安装配置nginx

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz