一、FastDFS的Nginx模块
- 一个好的分布式文件系统最好提供 Nginx 的模块,因为对于互联网应用来说,像文件这种静态资源,一般是通过HTTP的下载,此时通过容易扩展的Nginx来访问FastDFS,能够让文件的上传和下载变得特别简单
- Nginx安装FastDFS模块,主要是安装在FastDFS的存储服务器(storage)上,而不是tracker和client上
二、在Nginx中安装该模块
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
cd nginx-1.16.1/
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-stream --with-pcre=/home/ubuntu/build/pcre-8.41 --with-zlib=/home/ubuntu/build/zlib-1.2.11 --with-openssl=/home/ubuntu/build/openssl-1.1.0g --add-module=/home/ubuntu/build/fastdfs-nginx-module/src
- 配置成功时如下所示,其会显示上面的模块被编译进去了
- 第三步:编辑Nginx源码目录中的objs/Makefile文件,添加如下的内容:
vim objs/Makefile
make
sudo make install
三、使用Nginx访问FastDFS文件
第一步(搭建FastDFS集群)
第二步(为storage节点配置文件)
- 因为此处我们为本地集群,所以所有的内容都混到一起了。实际开发中,如果想让哪台sotrage服务端提供Nginx的功能,那么就在哪台storage机器上就需要配置下面的内容
- 第一步:将fastdfds-nginx-module模块源码包中的src目录下的mod_fastdfs.conf文件拷贝一份到/etc/fdfs目录下
sudo cp ~/build/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
ls /etc/fdfs/
- 第二步:修改/etc/fdfs/mod_fastdfs.conf配置文件,修改的内容如下:
- base_path:此storage服务节点数据和日志存储路径
- tracker_server:此storage服务节点工作在哪个tracker_server服务节点下(如果有多个,那么可以写多个,每一个占一行)
- storage_server_port:此storage服务节的监听端口
- url_have_group_name:设置为true,表示URL中可以包含组的名字(例如浏览器通过带有组名的URL去访问Nginx就需要设置这一项)
- store_path0:此storage服务节存储文件数据的路径
- group_count:设置组的个数,此处我们有2个组(在实际开发中,每个storage节点都单独运行在一条服务器上,从而端口都是相同的(为23000)。但是由于此处我们都运行在一个机器上,group1中有两台storage节点,端口分别为23000和23001,此处我们只填了一个23001,不知道效果会怎样,先这样写吧)
sudo vim /etc/fdfs/mod_fastdfs.conf
- 第三步:将fastdfs源码目录conf/目录下的http.conf、mime.types也复制到/etc/fdfs/目录下
sudo cp ~/build/fastdfs/conf/http.conf /etc/fdfs/
sudo cp ~/build/fastdfs/conf/mime.types /etc/fdfs/
- 备注:如果不复制“http.conf、mime.types”,直接去启动Nginx,那么会出现Nginx会报下面的错误(在/usr/local/nginx/logs/error.log中查看),从而导致Nginx的worker进程会启动失败,导致也无法提供Web服务,原因是/etc/fdfs/下缺少 http.conf 和 mime.types文件
- 第四步(可选的):修改http.conf中的http.anti_steal.token_check_faile参数,该参数设定一个文件,用来在在客户访问Nginx出错的时候显示。此处我们设定为fastdfs源码中的一张图片(这个文件随意设置)
sudo vim /etc/fdfs/http.conf
第三步(启动节点、开启Nginx)
- 第一步:先将group1组内的storage2节点重新启动
sudo fdfs_storaged ~/fastdfs/storage/group1/storage2/storage.conf restart
- 第二步:修改Nginx的配置文件,添加的内容如下:
- root(可选的):表示文档的根目录。见文章最下面的URL解析
- ngx_fastdfs_module:指定模块
sudo vim /usr/local/nginx/conf/nginx.conf
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
第四步(通过Nginx访问FastDFS)
- 第一步:现在我们有一张图片(名为test.jpg),现在我们使用fdfs_upload_file工具将这个文件上传到FastDFS中,然后查看storaged节点验证上传成功
fdfs_upload_file ~/fastdfs/client/client.conf ./test.jpg
ls ~/fastdfs/storage/group1/storage2/store_data/data/00/00/
- 第二步:现在我们就可以通过Nginx来访问这个文件了
- URL解析:
- 当URL中以“/group1/M00/xxxx”格式去访问时,“/group1/M00/”会匹配到我们上面Nginx配置文件中的location语句块
- 又因为/group1/M00/路径相当于我们本案例中storage2节点的路径(~/fastdfs/storage/group1/storage2/store_data/data/),因此在后面加上00/00/xxx.jpg就能够访问到storage节点中的数据
- 在Nginx配置文件的location语句块中我们注释掉了root,因为那个是默认路径(只要通过~/group([0-9])/M00去访问就会访问到那个地址),可以不指定了。并且制定了就固定死了只能去访问那个路径,如果storage节点很多,那么就不制定root了。
- 我是小董,V公众点击"笔记白嫖"解锁更多【Nginx】资料内容。