Nginx+FastDFS
1.nginx
1.什么是nginx
Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:
作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高
的效率,这点使Ngx尤其受到虚拟主机提供商的欢迎。能钩够支持高达50,000个并发连接数
的响应,感谢Nginx为我们选择了epoll and kqueue作为开发模型.作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代
理服务器对外进行服务。Ngx用C编写,不论是系统资源开销还是CPU使用效率都比
Perlbal要好的多。作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的
目的之一也是作为邮件代理服务器),Lāst.fm描述了成功并且美妙的使用经验。Nginx安装非常的简单,配置文件非常简洁(还能钩够支持Derl语法),Bugs非常少的服务
器:Ng×启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新
启动。你还能够在不间断服务的情况下进行软件版本的升级。
nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必备的功能
- WEB服务器(静态服务器)
- 反向代理
- 负载均衡
- 动态路由
- 请求过滤
2.nginx作为服务器
1.web服务器的分类
- web应用服务器,如:
- tomcat
- resin
- jetty
- web服务器(静态资源服务器),如:
- Apache 服务器
- Nginx
- IIS
区别:
web服务器(Nginx)不能解析jsp、servlet等动态资源,只能处理js、css、html等静态资源
web应用服务器(Tomcat)可以jsp、servlet等动态资源,也可以处理js、css、html等静态资源。
并发: web服务器(Nginx)的并发能力远高于web应用服务器(Tomcat)。
3.nginx作为反向代理
1.什么是反向代理?
- 代理:通过客户机的配置,实现让一台服务器代理客户机,客户的所有请求都交给代理服务 器处理。
- 正向代理
比如:各种FQ软件,vpn,各种游戏加速器等等。
-
反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代 理服务器。
-
我们需要提前在nginx中配置好反向代理的规则,不同的请求,交给不同的真实服务器处理
-
当请求到达nginx,nginx会根据已经定义的规则进行请求的转发,从而实现路由功能
4.nginx的安装
Nginx下载地址
http://nginx.org/en/download.html
1.解压压缩文件
将下载下来的Nginx的安装包,解压到没有中文、空格的目录中即可。
- conf:配置目录
- contrib:第三方依赖
- docs:文档目录
- html:默认的静态资源目录,类似于tomcat的webapps
- logs:日志目录
- temp:临时目录
- nginx.exe:启动程序。可双击运行,但不建议这么做。
2.启动Nginx
方式一:双击Nginx安装目录nginx.exe
方式二:cmd中执行指令
3.关闭Nginx
打开Windows的任务管理,找到nginx的进程,杀死即可
4.访问
浏览器输入地址:http://localhost/,出现以下页面即为启动成功,nginx默认端口是80
5.nginx作为web服务器的使用
Nginx 是一个 http 服务可以独立提供 http 服务。可以做网页静态服务器(存放静态资源 (css,js,html)服务区)。
1.编辑nginx.conf配置文件,添加如下配置
server{
listen 80; #监听端口
server_name www.yan8.com; #主机地址,可以是ip地址或者域名
location / { # 请求路径对应的资源目录 / :localhost:80/
root D:/Software/Java/nginx-1.18.0/yan8; # 资源目录,如果目录是在nginx的安装目录,可以只写目录名
index index.html index.htm; # 默认打开资源目录中的哪个文件
}
}
2.在nginx安装根目录下创建yan8目,并创建index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to yan8!</title>
</head>
<body>
<h1>Welcome to yan8!</h1>
</body>
</html>
3.修改Windows系统的hosts文件
hosts文件的位置:C:\Windows\System32\drivers\etc
127.0.0.1 www.yan8.com
4.启动nginx
5.进行测试
6.nginx作为反向代理
1.将一个管理系统项目部署到Tomcat中,启动Tomcat
2.在hosts文件中添加一个配置
127.0.0.1 www.personnel.com
3.在nginx.conf文件中添加server配置
server{
listen 80; #监听端口
server_name www.personnel.com; #主机地址,可以是ip地址或者域名
proxy_set_header X-Forwarded-Host $host; #把原Http请求的Header中的XForwarded-Host(主机地址)字段放到转发的请求中
proxy_set_header X-Forwarded-Server $host; #把原Http请求的Header中的X-Forwarded-Server(主机名)字段放到转发的请求中
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取用户真实ip
location / {
proxy_pass http://127.0.0.1:8080; # 转发地址,代理的真正地址
proxy_connect_timeout 600; # 连接超时时间
proxy_read_timeout 600; # 读取超时时间
}
}
4.重启nginx进行测试
7.nginx作为负载均衡使用
1.对管理系统项目进行集群部署(部署到两台Tomcat中)
修改两台Tomcat中的人事管理系统的loginForm.jsp的title分别为"创新创业型小微企业的人力资 源管理平台8080"和"创新创业型小微企业的人力资源管理平台8081"。
修改两个Tomcat的端口分别为8080和8081。(修改Tomcat安装目录下的conf目录下 server.xml文件)
启动两个Tomcat,分别访问
2.修改nginx.conf的配置文件
upstream personnel{
server 127.0.0.1:8080 weight=4; # weight访问权重,简单理解:9次中有4次访问
server 127.0.0.1:8081 weight=5;
}
server{
listen 80; #监听端口
server_name www.personnel.com; #主机地址,可以是ip地址或者域名
proxy_set_header X-Forwarded-Host $host; #把原Http请求的Header中的XForwarded-Host(主机地址)字段放到转发的请求中
proxy_set_header X-Forwarded-Server $host; #把原Http请求的Header中的
X-Forwarded-Server(主机名)字段放到转发的请求中
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取
用户真实ip
location / {
proxy_pass http://personnel; # 转发地址,代理的真正地址
proxy_connect_timeout 600; # 连接超时时间
proxy_read_timeout 600; # 读取超时时间
}
}
3.重启nginx,进行测试
2.fastdfs
1.什么是分布式文件系统
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直 接连接在本地节点上,而是通过计算机网络与节点相连。
- 传统文件系统管理的文件就存储在本机。
- 分布式文件系统管理的文件存储在很多机器,这些机器通过网络连接,要被统一管理。无论 是上传或者访问文件,都需要通过管理中心来访问
2.什么是FastDFS
FastDFS是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件存储系统。用 纯C语言开发,功能丰富:
它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载) 等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网 站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高 可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上 传、下载等服务。
- 文件存储
- 文件同步
- 文件访问(上传、下载)
- 存取负载均衡
- 在线扩容
3.FastDFS的架构
FastDFS两个主要的角色:Tracker Server 和 Storage Server
- Tracker Server:跟踪服务器(管理中心),主要负责调度storage节点与client通信,在访 问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。
- Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息
- Group:文件组,多台Storage Server的集群。上传一个文件到同组内的一台机器上后, FastDFS会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。不同组的服务 器,保存的数据不同,而且相互独立,不进行通信。
- Tracker Cluster:跟踪服务器的集群,有一组Tracker Server(跟踪服务器)组成。
- Storage Cluster :存储集群,有多个Group组成。
4.上传和下载流程
1.上传流程
客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信 息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
组名:文件上传后所在的 storage 组名称,在文件上传成功后有storage 服务器返回,需要客户 端自行保存。
虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项store_path*对应。如果配置了 store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储 服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
2.下载流程
5.单节点FastDFS安装和使用
1.安装gcc
- yum -y install gcc
- yum install -y unzip zip
- yum -y install libevent
2.安装libfastcommon-master
在linux的opt目录中创建fastdfs目录,并将安装文件上传到此目录中。
- unzip libfastcommon-master.zip
- cd libfastcommon-master
- ./make.sh
- ./make.sh instal
3.安装fastdfs
- tar -zxvf FastDFS_v5.08.tar.gz
- cd FastDFS
- ./make.sh
- ./make.sh install
1.配置并启动tracker服务
-
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
-
cd /opt/fastdfs
-
mkdir -p lanou/tracker
-
vim /etc/fdfs/tracker.conf 修改内容
base_path=/opt/fastdfs/lanou/tracker
-
service fdfs_trackerd start # 启动fdfs_trackerd服务,停止用stop
-
ps -ef | grep fdfs_trackerd 检查是否启动成功
2.配置并启动storage服务
- cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
- cd /opt/fastdfs/lanou
- mkdir -p storage
- vim /etc/fdfs/storage.conf 修改内容如下
base_path=/opt/fastdfs/lanou/storage # 数据和日志文件存储根目录
store_path0=/opt/fastdfs/lanou/storage # 第一个存储目录
tracker_server=192.168.200.129:22122 # tracker服务器IP和端口
- service fdfs_storaged start # 启动fdfs_storaged服务,停止用stop
- ps -ef | grep fdfs
- Linux防火墙对端口放行
firewall-cmd --permanent --add-port=22122/tcp #tracker服务器端口
firewall-cmd --permanent --add-port=23000/tcp #storage服务器端口
systemctl restart firewalld
3.使用nginx访问FastDFS
1.为什么需要用Nginx访问?
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。
假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户 端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没 有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无 法访问的错误。
而fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端 由于复制延迟导致的文件无法访问错误
2.安装fastdfs-nginx-module
- tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
- cd fastdfs-nginx-module/src/
- vim config
- : %s+/usr/local/+/usr/+g 将文件中所有的/usr/local替换为 /usr
3.配置nginx与FastDFS关联配置文件
- cp /opt/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
- vim /etc/fdfs/mod_fastdfs.conf
connect_timeout=10 # 客户端访问文件连接超时时长(单位:秒)
tracker_server=192.168.200.129:22122 # tracker服务IP和端口
url_have_group_name=true # 访问链接前缀加上组名
store_path0=/opt/fastdfs/test/storage # 文件存储路径
- cd /opt/fastdfs/FastDFS/conf/
- cp http.conf mime.types /etc/fdfs/
4.安装Nginx的插件
- yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 安装nginx的依赖库
- cd /opt
- mkdir nginx mv /opt/fastdfs/nginx-1.10.0.tar.gz /opt/nginx/
- cd /opt/nginx
- tar -zxvf nginx-1.10.0.tar.gz cd nginx-1.10.0 ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --addmodule=/opt/fastdfs/fastdfs-nginx-module/src
- make && make install
5.启动nginx
- vim /opt/nginx/conf/nginx.conf
- 将文件中,原来的 server 80{ ...} 部分代码替换为如下代码
server {
listen 80;
server_name image.test.com;
# 监听域名中带有group的,交给FastDFS模块处理
location ~/group([0-9])/ {
ngx_fastdfs_module;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- nginx # 启动nginx
- nginx -s stop # 停止nginx(不是必须执行的)
- nginx -s reload # 无需重启nginx,重新载入配置文件(不是必须执行的)
- Linux防火墙对80端口放行
4.使用springboot进行图片测试
1.修改hosts文件
windows中的hosts文件中增加
192.168.200.129 image.test.com
2.创建一个springboot项目
3.引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.1-RELEASE</version>
</dependency>
4.编写yml配置文件
fdfs:
so-timeout: 1501 # 超时时间
connect-timeout: 601 # 连接超时时间
thumb-image: # 缩略图
width: 60
height: 60
tracker-list: # tracker地址:你的虚拟机服务器地址+端口(默认是22122)
- 192.168.136.66:22122
5.编写配置类
@Configuration
@Import(FdfsClientConfig.class)
// 解决重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
}
6.编写Controller进行测试
浏览器 -> controller -> fastdfs
@RestController
public class UpLoadController {
@Autowired
private FastFileStorageClient storageClient;
@RequestMapping("/up")
public String testUpload() throws FileNotFoundException {
// 要上传的文件
File file = new File("E:\\123.jpg");
// 上传并保存图片,参数:1-上传的文件流 2-文件的大小 3-文件的后缀 4-可
以不管他
StorePath storePath = this.storageClient.uploadFile(new FileInputStream(file), file.length(), "jpg", null);
// 带分组的路径
System.out.println(storePath.getFullPath());
// 不带分组的路径
System.out.println(storePath.getPath());
return "success";
}
}
7.测试是否上传成功
注意:如果使用的阿里云或者腾讯云等云服务器,这些云服务器会自动检测域名是否合法,不合 法不能使用,所以这时可以使用ip访问Linux中的nginx
[]: (http:/192.168.200.129/group1/M00/00/00/wKjlgWLgdDeAJfv6AAFqAmhf_3Y000.jpg)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理