我们作为初级小白,在最初写的代码时,都是在自己的主机上运行的。但是当项目过大时,是无法在单节点上操作的(效率太低)
于是我们选择集群,即将该节点复制n份(大家都干一样的话)
当同样的工作同时大批量过来时,可以将它们分布到n个节点上,缓解压力
即服务器用空间换时间
但又有个问题是,用户根本无法记住这么多服务器的ip,顶多记个域名(www.baidu.com)
所以我们将具体访问哪个服务器的任务交给Nginx
而我们只需要给Nignx配置它需要代理的服务器
什么是Nginx
【摘自百度】Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web 服务器/反向代理服务器[电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
大型项目根本不可能在单节点上运行,所以找个代理器将项目为我们分配到不同的服务器
正向代理和反向代理
正向代理:需要在客户端配置代理服务器进行指定网站访问(比如下个VPN去Github)
反向代理:暴露的是代理服务器地址,隐藏了真实服务器IP地址
负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
nginx分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down掉,能自动剔除。
第二种weight
weight代表权重默认为 1,权重越高被分配的客户端越多
第三种ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
第四种fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离
配置文件
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:事件
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:包含包含两部分:http全局块和server块。可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
#注释
#user 适用于linux操作系统,因为linux需要指定由哪个用户来启动linux(因为linux有权限)
#user nobody;
#工作进程 后面的参数是说nginx有几个工作进程,一般是几个CPU就给几个工作进程
worker_processes 1;
#事件
events {
worker_connections 1024;#一个工作进程可有的连接
}
#代理http协议
#Nignx开启后,占用一个端口,监听某个端口上的协议
http {
include mime.types; #mime.types中说明了可以接收的文件类型
default_type application/octet-stream; #默认接收的类型
sendfile on; #发送文件,在浏览器上发送文件,Nginx可以接收文件
#tcp_nopush on; #不开启接收推送(比如网站上的广告弹窗)
#keepalive_timeout 0;
keepalive_timeout 65; #存活时间65s
upstream logic{
server localhost:8080;
server localhost:9000;
}
server { #server对象
#在哪个端口监听
listen 80;
server_name localhost;
location / { #请求地址是/,即所有的请求地址
#root html;
#index index.html index.htm;
proxy_pass http://logic/; #将地址转到另一个地址位置
}
}
}
实例演示
在nginx.conf配置文件中添加如下内容:
开启两个SpringBoot项目,一个端口号为8080,另一个设置为9000
开启两个项目,开启Nignx.exe
在浏览器地址栏中输入相关的接口
不停刷新就会出现不同页面(访问不同端口中的接口获取到不一样的数据)