FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】
文章目录
- 前言
- 1. 本地搭建FastDFS文件系统
- 1.1 环境安装
- 1.2 安装libfastcommon
- 1.3 安装FastDFS
- 1.4 配置Tracker
- 1.5 配置Storage
- 1.6 测试上传下载
- 1.7 与Nginx整合
- 1.8 安装Nginx
- 1.9 配置Nginx
- 2. 局域网测试访问FastDFS
- 3. 安装cpolar内网穿透
- 4. 配置公网访问地址
- 5. 固定公网地址
- 5.1 保留二级子域名
- 5.2 配置二级子域名
- 6. 测试访问固定二级子域名
前言
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
配备一台公网服务器作为文件上传下载,花费资源和开销比较大,如果在本地搭建FastDFS服务,只把上传后的文件通过cpolar内网端口转发工具将文件配置可通过互联网访问,极大了减少服务器费用及开销,本文介绍详细搭建FastDFS教程,并结合Nginx+cpolar工具实现远程访问文件。
1. 本地搭建FastDFS文件系统
1.1 环境安装
由于fastDFS是由c语言编写,所以我们需要安装gcc
yum -y install gcc-c++
FastDFS依赖libevent库
,需要安装。执行如下命令:
yum -y install libevent
1.2 安装libfastcommon
进入local目录
cd /usr/local
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。点击下面链接即可获取:
https://github.com/happyfish100/libfastcommon/releases/tag/V1.0.7
获取后,上传到local
目录下
解压libfastcommon
tar -zxvf libfastcommonV1.0.7.tar.gz
进入解压文件夹
cd libfastcommon-1.0.7/
编译
./make.sh
安装
./make.sh install
libfastcommon安装好后会自动将库文件拷贝至/usr/lib64
下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
cp /usr/lib64/libfastcommon.so /usr/lib/
1.3 安装FastDFS
进入local目录
cd /usr/local
点击下列地址,可获取下载FastDFS_v5.05.tar.gz文件:
https://sourceforge.net/projects/fastdfs/
下载文件后,上传FastDFS_v5.05.tar.gz
到/usr/local/
解压文件
tar -zxvf FastDFS_v5.05.tar.gz
进入解压文件夹
cd FastDFS
编译
./make.sh
安装
./make.sh install
安装成功后,将安装目录下的conf下的文件拷贝到/etc/fdfs/
下
cd conf/
拷贝
cp * /etc/fdfs/
1.4 配置Tracker
接下来进行配置,安装成功后进入/etc/fdfs
目录
cd /etc/fdfs/
修改tracker.conf
vim tracker.conf
把base_path=/home/yuqing/fastdfs
改为base_path=/home/fastdfs
编辑后保存退出,然后创建一个对应的fastdfs文件夹
mkdir /home/fastdfs
然后启动
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
设置开机启动
vim /etc/rc.d/rc.local
将运行命令行添加进文件
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
1.5 配置Storage
进入/etc/fdfs目录
cd /etc/fdfs
修改storage.conf
vim storage.conf
把base_path=/home/yuqing/fastdfs
改为base_path=/home/fastdfs
把store_path0=/home/yuqing/fastdfs
改为store_path0=/home/fastdfs/fdfs_storage
继续修改,设置tracker服务器:IP,tracker_server=Linux局域网ip:22122 ,设置好后保存退出
创建对应fdfs_storage文件夹
mkdir /home/fastdfs/fdfs_storage
然后启动
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
设置开机自动启动
vim /etc/rc.d/rc.local
将运行命令行添加到文件,然后保存
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
1.6 测试上传下载
FastDFS安装成功可通过/usr/bin/fdfs_test命令测试上传、下载等操作。
修改/etc/fdfs/client.conf
vim /etc/fdfs/client.conf
修改如下内容,然后保存:
base_path=/home/fastdfstracker_server=Linux局域网ip:22122
接下来测试上传文件,这里上传了一张图片到/usr/local
目录下,作为测试使用
FastDFS上传文件使用格式:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload+ 上传文件的路径
然后按照格式,测试将test23.png图片上传到FastDFS中
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/local/test23.png
执行后,我们可以看到返回地址信息,表示成功,但是目前还访问不了,需要结合Nginx做访问下载
1.7 与Nginx整合
点击下载下面链接下载fastdfs-nginx-module_v1.16:
[https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz/download](https://sourceforge.net/projects/fastdfs/files/FastDFS Nginx Module Source Code/fastdfs-nginx-module_v1.16.tar.gz/download)
进入 /usr/local/文件夹下
cd /usr/local/
上传fastdfs-nginx-module_v1.16.tar.gz
解压fastdfs-nginx-module_v1.16.tar.gz
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
进入src,然后编辑配置文件
cd fastdfs-nginx-module/src/
修改config文件
vim config
修改这三个位置,将里面原本是/usr/local/的路径改为/usr/,然后保存退出
然后将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
修改mod_FastDFS.conf的内容:
vim /etc/fdfs/mod_fastdfs.conf
修改内容如下:
base_path=/home/fastdfs
tracker_server=Linux局域网ip地址:22122
url_have_group_name=true #url中包含group名称
store_path0=/home/fastdfs/fdfs_storage #指定文件存储路径
接下来将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
创建nginx/client目录即可
mkdir -p /var/temp/nginx/client
1.8 安装Nginx
首先安装系列环境
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
然后点击下载Nginx包:
nginx-1.16.1.tar.gz
上传到root目录下
解压,并进入解压文件夹
tar -zxvf nginx-1.16.1.tar.gz && cd nginx-1.16.
添加FastDFS-nginx-module模块,执行以下命令:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src
然后编译
make
安装
make install
1.9 配置Nginx
修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
添加server,添加后保存退出:
server {listen 8089;#为了防止80端口,我们改成8089server_name 192.168.59.133;#这里需要使用你本机的局域网iplocation /group1/M00/{ngx_fastdfs_module;}
}
启动Nginx
/usr/local/nginx/sbin/nginx
如果启动nginx出现以下错误:
nginx: [emerg] open() “/var/run/nginx/nginx.pid” failed (2: No such file or directory)
可以执行如下命令,然后再次启动:
mkdir /var/run/nginx
设置开机自动启动。
vim /etc/rc.d/rc.local
将运行命令行添加进文件,然后保存退出:
/usr/local/nginx/sbin/nginx
关闭防火墙
service iptables stop
设置防火墙不自动启动
chkconfig iptables off
2. 局域网测试访问FastDFS
然后按照格式,测试将上面我们上传的test23.png图片上传到FastDFS中
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/local/test23.png
执行后,我们可以看到返回地址信息,表示成功
然后使用上面的地址,在浏览器访问,即可看到我们上传的图片,fastDFS搭建完成
3. 安装cpolar内网穿透
上面我们在本地Linux虚拟机安装了fastDFS分布式文件服务,下面我们安装cpolar内网穿透工具,通过cpolar的http公网地址,我们可以很容易远程也可以访问fastDFS里面上传的文件,而无需自己注册域名购买云服务器.下面是安装cpolar内网穿透步骤
cpolar官网:https://www.cpolar.com/
- 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
- token认证
登录cpolar官网后台,点击左侧的验证,查看自己的认证token,之后将token贴在命令行里:
cpolar authtoken xxxxxxx
- 向系统添加服务
sudo systemctl enable cpolar
- 启动cpolar服务
sudo systemctl start cpolar
4. 配置公网访问地址
成功启动cpolar服务后,我们在浏览器上访问Linux局域网ip地址+9200端口,登录cpolar web UI管理界面。
登录成功后,点击左侧仪表盘的隧道管理——创建隧道,创建一个http协议的隧道指向上面设置的Nginx8089端口:
- 隧道名称:可自定义,注意不要与已有的隧道名称重复
- 协议:http
- 本地地址:8089
- 域名类型:免费选择随机域名
- 地区:选择China VIP
点击创建
然后打开在线隧道列表,查看并且复制公网地址
然后打开浏览器,输入公网地址,访问我们上传在fastDFS里的文件,即可远程访问成功
5. 固定公网地址
由于刚刚创建隧道使用的是随机临时地址,该地址会在24小时内发生变化,为了长期和更稳定远程访问,我们接下来将这个公网地址配置为固定的,
5.1 保留二级子域名
需升级至基础套餐或以上才支持配置二级子域名,如有下载文件的需求,可以升级更高套餐以便获取更大的带宽,提高下载速度
登录cpolar官网后台,点击左侧仪表盘的预留
,找到保留二级子域名
,为http隧道保留一个二级子域名。
- 地区:选择服务器地区
- 名称:填写您想要保留的二级子域名(可自定义)
- 描述:即备注,可自定义填写
本例保留一个名称为fasttest
的二级子域名。子域名保留成功后,我们将子域名复制下来,接下来需要将其配置到隧道中去。
5.2 配置二级子域名
登录cpolar web ui管理界面。点击左侧仪表盘的隧道管理
——隧道列表
,找到需要配置二级子域名的隧道,点击右侧的编辑
修改隧道信息,将二级子域名配置到隧道中:
- 域名类型:改为选择
二级子域名
- Sub Domain:填写我们刚刚所保留的二级子域名(本例为
fasttest
)
修改完成后,点击更新
隧道更新成功后,点击左侧仪表盘的状态
——在线隧道列表
,可以看到隧道的公网地址,已经更新为二级子域名了,将公网地址复制下来。
6. 测试访问固定二级子域名
我们来测试一下访问配置成功的二级子域名,打开浏览器,输入公网地址加资源路径,访问我们上传在fastDFS里的文件,出现图片即可远程访问成功。现在,我们全网唯一的私有二级子域名,就创建好了。
而且这个地址也不会再随机变化,他是固定不变的,只要保持隧道在线,我们在外就可以通过这个公网地址,随时随地远程访问,无需公网IP,也不用设置路由器。
转载自cpolar极点云的文章:FastDFS与Nginx结合搭建文件服务器,并内网穿透实现公网访问
相关文章:
FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】
文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...
嵌入式蓝海变红海?其实是大浪淘沙!
嵌入式是当下热门的职业方向之一,吸引了众多求职者的目光。然而,有人担心大家一拥而上,导致嵌入式就业竞争激烈,找工作难度大。其实,嵌入式行业的竞争并非无法逾越的天堑,也远远没有从蓝海变成红海…...
【附安装包】Solid Edge2023安装教程最强CAD选择
软件下载 软件:Solid Edge版本:2023语言:简体中文大小:3.85G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.bai…...
494. 目标和
494. 目标和 原题链接:完成情况:解题思路:数组回溯法动态规划 参考代码:数组回溯法__494目标和__动态规划 经验吸取 原题链接: 494. 目标和 https://leetcode.cn/problems/target-sum/description/ 完成情况&#…...
C++学习笔记总结练习:C++编译过程详解
编译和链接的过程 0 概述 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。接下来通过几个简单的例子来详细讲解一下这些过程。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFwSfKYp-1692237034055)(imag…...
嵌入式设备应用开发(qt界面开发)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux界面开发有很多的方案可以选。比如说lvgl、minigui、ftk之类的。但是,这么多年来,一直屹立不倒的还是qt。相比较其他几种方案,qt支持多个平台,这里面就包括了linux平台。此…...
pytest结合Excel实现接口自动化
前言 我们先来回顾下之前篇章“pytest通过parametrize方法实现数据驱动实战”,主要是通过yaml文件来读取测试用例。而我们用Excel文件存放测试用例又有什么区别呢? 毫无疑问,Pytest自动化测试框架也能读取Excel文件实现数据驱动。 还记得之…...
【LLM数据篇】预训练数据集+指令生成sft数据集
note 在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等优秀的开源sft数据集:alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等 文章目录 note构造指令实例…...
WebDAV之π-Disk派盘 + 一羽记帐
一羽记帐是一款真正让你体验3S极速记账的轻量级APP。针对个人记账,没有花哨冗余的功能。界面美丽、无广告、极速启动、功能全面。一羽记帐功能涵括广,基本可以满足90%人的记账需求。完全无侵入、百分百无广告,无需担心数据安全,所有的操作都不经过任何第三方。 π-Disk派盘…...
ChatGPT:记一次超复杂的KVM桌面系统连接问答记录
KVM切换器可以使多台电脑共用键盘,显示器,鼠标,当电脑很多,显示器也是分为主从,需要共用键盘鼠标和音响设备,而买KVM切换器只有2个通道4进2出不满足需求时,就要组合多个KVM使用,大…...
python-docx把dataframe表格添加到word文件中
python-docx把dataframe表格添加到word文件中思路较为简单: 先把dataframe格式转变为table新建一个段落:document.add_paragraph()把table添加到这个段落下方 效果图 示例代码 from docx import Document, oxml import pandas as pd import numpy as …...
Web AP—BOM 浏览器对象模型
代码下载 BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。 BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。 BOM 缺乏标…...
Flink分流,合流,状态,checkpoint和精准一次笔记
第8章 分流 1.使用侧输出流 2.合流 2.1 union :使用 ProcessFunction 处理合流后的数据 2.2 Connect : 两条流的格式可以不一样, map操作使用CoMapFunction,process 传入:CoProcessFunction 2.2 BroadcastConnectedSt…...
c# 实现sql查询DataTable数据集 对接SqlSugar ORM
有时候对于已经查询到的数据集,想要进行二次筛选或者查询,还得再查一遍数据库 或者其他的一些逻辑处理不太方便,就想着为什么不能直接使用sql来查询DataTable呢? 搜索全网没找到可用方案,所以自己实现了一个。 主要…...
记一次布尔盲注漏洞的挖掘与分析
在上篇文章记一次由于整型参数错误导致的任意文件上传的漏洞成因的分析过程中,发现menu_id貌似是存在注入的。 public function upload() {$menu_id $this->post(menu_id);if ($id) {$where "id {$id}";if ($menu_id) {$where . " and menu_id…...
C++11 新特性 ---- noexcept
1. 异常 异常通常用于处理逻辑上可能发生的错误 在C98中,提供了一套完善的异常处理机制,直接在程序中将各种类型的异常抛出,从而强制终止程序的运行。 1.1 基本语法 当函数抛出异常时,程序会停止执行,并显示异常信息…...
《Linux运维总结:Centos7.6之OpenSSH7.4p1升级版本至9.4p1》
Centos通过yum升级OpenSSH 在官方支持更新的CentOS版本,如果出现漏洞,都会通过更新版本来修复漏洞。这时候直接使用yum update就可以升级版本。 yum -y update openssh 但是,CentOS更新需要有一段时间,不能在漏洞刚出来的时候就有…...
七夕节日表白:七大网页风格与其适用人群
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
通达信指标公式16:使用BARSLAST函数写一个指标回测的思路
★★★★★博文原创不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习小技巧,喜欢的老铁可以多多帮忙点赞,小红牛在此表示感谢,就是对作者的最大支持。愿与诸君共勉,悟道于股市★★★★★…...
Jenkins自动化部署Vue项目
1、新建item,选择 Freestyle project 2、源码管理选择git,输入git仓库地址和授权账号,并指明要部署的分支 3、构建选择 Execute shell,输入vue项目打包命令 命令示例: source /etc/profile node -v npm config set re…...
Android JNI打印logcat日志
在 JNI 中打印日志可以使用 __android_log_print 函数来实现。该函数是 Android NDK 提供的一个用于在本地代码中输出日志消息到 logcat 的方法。 要在 JNI 中打印日志,请按照以下步骤进行操作: 在你的 JNI C/C 代码中包含 <android/log.h> 头文件…...
第28次CCF计算机软件能力认证(测试)
测试300分要是考试的时候也能这么发挥就好 第一题:现值计算 解题思路:直接模拟 n , m input().split() n int(n);m float(m) l list(map(int , input().split())) res 0 for i in range(0 , n 1):res pow(1 m , -i) * l[i] print(res) 第二题…...
九耶丨阁瑞钛伦特-Java高频面试题-请谈谈 ReadWriteLock 和 StampedLock
ReadWriteLock包括两种子锁 (1)ReadWriteLock ReadWriteLock 可以实现多个读锁同时进行,但是读与写和写于写互斥,只能有一个写锁线程在进行。 (2)StampedLock StampedLock是Jdk在1.8提供的一种读写锁&a…...
【Linux操作系统】深入探索Linux系统编程中的信号集操作函数
在Linux系统编程中,信号集操作函数是非常重要的工具,它们允许我们对信号进行管理和控制。本篇博客将详细介绍Linux系统编程中的信号集操作函数,包括信号集的创建、添加和删除信号,以及对信号集进行操作的常用函数。通过深入了解这…...
[C初阶笔记]P2
Git 1、Git是Linus为了帮助管理Linux内核开发 而开发的一个开放源码的分布式版本控制软件。 2、Git和TortoiseGit的作用。 Git中有各种命令行操作,来维护代码,可以将代码推送到代码托管平台。 TortoiseGit是将Git中各自命令行操作转化为图形化操作。 …...
C++并发编程学习01——hello concurrent world
经典用例 #include <iostream> #include <thread>void hello() {std::cout << "hello concurrent world" << std::endl; }int main() {std::thread t(hello);t.join(); }编译 g -g test.cpp -o out -lpthreadgdb调试 (gdb) r Starting pr…...
大数据扫盲(2): 数据分析BI与ETL的紧密关系——ETL是成功BI的先决条件
着业务的发展每个企业都将产生越来越多的数据,然后这些数据本身并不能直接带来洞察力并产生业务价值。为了释放数据的潜力,数据分析BI(商业智能)成为了现代企业不可或缺的一部分。然而,在数据分析的背后,有…...
Java web 中的 jsp
JSP是什么 JSP是动态网页编程技术 JSP的四大作用域 1.page 表示在当前页面有效 2.request 表现在一次请求中有效 3.session 表示在一次会话中有效 4.application 表示在整个应用程序中有效 jsp内置对象是什么 在jsp开发中会频繁使用到一些对象,如果每次我们在jsp页面中需要…...
uniapp 数组操作
字符串转数组 let string "12345,56789" string.split(,) // [12345,56789] 数组转字符串 let array ["123","456"] array.join(",") // "123,456" 数组元素删除 let array [123,456] // 删除起始下标为1࿰…...
数据结构算法--4堆排序
堆排序过程: >建立堆(大根堆) >得到堆顶元素,为最大元素 >去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整使堆重新有序 >堆顶元素为第二大元素 >重复步骤3,直到堆变空 此时是建立堆后的大根堆模型 将…...
遵义原创网站/百度sem代运营
主要技术:Java、SpringBoot、SpringMVC、Mybatis、shiro、 MYSQL、Jquery layui等技术 主要功能: 1) 用户登录、注册功能 2) 管理端功能:用户管理、考勤管理、流程管理、公告管理 3)管理端功能:考勤管理、流程管理、…...
网页设计专业就业前景/windows清理优化大师
第五章 SAP阿里云实施 5.1云基础实施 5.1.1申请开通阿里云帐户 请在www.aliyun.com首页点免费注册,淘宝与1688帐户可以直接登录无需注册,注意如果是申请企业用户请避免注册个人支付宝帐户以免带来不必要的麻烦。注册详细步骤请参见阿里云账号注册…...
企业网站建设一般包含哪些内容/能翻到国外的浏览器
title: Spring加载资源文件冲突问题 tags: tomcat8springmacwebjarsj2cache categories: spring date: 2017-11-14 16:42:08背景 开发者在使用Spring做Properties文件载入时,这也是spring做placeholder的便捷之处。 classpath:和classpath*:想必也是大部分开发都会写…...
java做网站需要的接口/seo岗位职责
A: 区别主要是:string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。char *的内存管理由用户自己处理,很容易出现内存不足的问题。当我们要存一个串,但是不知道其他需要多少内存时…...
怎么用代码做网站推荐/搜什么关键词你都懂的
为什么80%的码农都做不了架构师?>>> 查询端口被哪个进程占用 netstat -ano | findstr "8095"查看进程编号对应的程序名称 tasklist | findstr "720"通过程序名称结束进程 taskkill /f /t /im java.exe通过进程编号结束进程 tskill …...
企业网站建设与网页设计/百度广告开户流程
虽说现在大部分企业都复工复产了,但是因为这次疫情,学生们仍然要接受线上教育。由此也衍生出来许多有意思的梗,比如说学生们刚开学就毕业,又好笑又心酸,不过这也从侧面印证了线上教育的重要性。 由于这次疫情的推动&am…...