一.Nginx介绍
1.1前言
随着客户端用户不断增多,请求量增加,并发量增高,那么咱们需要搭建服务器的集群。
为什么使用Nginx?
- 客户端发送请求要发给哪台服务器?
- 如果所有客户端的请求都发给了服务器1?
- 客户端请求可能是静态资源也可能是动态资源?
这时候,我们就需要追加一个Nginx来反向代理,客户端只需要发送请求给Nginx,让它帮我们解决上面的全部问题。
1.2 Nginx介绍
特点:
- 稳定性强,7*24不间断运行
- Nginx提供了非常丰富的配置实例
- 内存占用小,并发能力强(TB,JD双11都在使用,是对Nginx的额外封装)
二.下载安装
进入官网如下图:
下载后解压即可(注:不要放在有中文路径的文件夹下面)。
双击nginx.exe程序,就启动了。
然后我们在浏览器中输入localhost(nginx默认是80端口,故不需要加端口号),出现下列画面即启动成功。
三.反向代理
3.1正向代理与方向代理介绍
正向代理:
1:正向代理服务器是由客户端设立的。
2:客户端了解代理服务器和目标是谁。
3:帮助我们提高访问的权限,提高访问的速度,对目标服务器隐藏客户端的ip地址。
反向代理:
1:反向代理服务器是配置在服务端的。
2:客户端时不知道访问的那一台服务器的。
3:达到负载均衡,并且可以隐藏服务器真正的ip地址。
3.2基于Nginx的反向代理实现
客户端:浏览器
反向代理服务器:Nginx
服务器:Tomcat
http://localhost:8080/hello/toLogin.do(自己手写的测试项目网址)
修改Nginx的配置文件nginx.conf如上图。
其中修改监听端口为:8888,访问Nginx网址为:localhost8888,需要跳转到目标服务器的网址为http://localhost:8080/hello/toLogin.do
保存后重启服务器,在浏览器中输入localhost8888,即可跳转到我们目标服务器的网址。
3.3关于Nginx的location路径的映射
# 1. =匹配
location = /{
#精准匹配,主机名后面不能带任何的字符
}
# 2. 通用匹配
location /xxx{
#匹配所有以/xxx开头的路径
}
# 3. 正则匹配
location ~ /xxx{
#匹配所有以/xxx开头的路径(优先级大于2)
}
# 4. 匹配开头路径
location ^~ /xxx/{
#匹配所有以/xxx开头的路径(优先级大于3)
}
# 5. ~* \.(gif|jpg|png){
#匹配以gif或jpg或png结尾的路径
}
配置文件里的server块里面可以配置多各location块,通过上面的优先级匹配,可以访问不同的目标服务器网址。
四.Nginx的负载均衡
Nginx为我们提供了默认的三种负载均衡策略:
1.轮询
将客户端发起的请求,平均分配给每一台服务器。(依次发送给每一台服务器)
2.权重
会讲客户端的请求,根据服务器的权重,分配不同的数量。(比如多台服务器的处理速度不一样)
3.ip_hash
基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器。(根据ip地址获取hash值,同样的hash值发送到同一台服务器)
4.1 轮询
在server上面配置自己的server,如下:
upstream 服务名称{
server ip:port; #注意:只能到端口号,后面不能加其他地址!!!
server ip:port;
#可以配置多个,上面只能配置ip地址加端口号,不能再后面跟其他的地址
}
在location块配置如下:
location / {
proxy_pass http://upstream的服务名称;
}
4.2 权重
只需要在轮询的基础上加上一点点配置:
upstream 服务名称{
server ip:port weight=权重比例;
server ip:port weight=权重比例;
#可以配置多个,上面只能配置ip地址加端口号,不能再后面跟其他的地址
}
在location块配置如下:
location / {
proxy_pass http://upstream的服务名称;
}
4.3 ip_hash
配置只需要在upstream下面加上一行配置:
upstream 服务名称{
ip_hash;
server ip:port;
server ip:port;
}
在location块配置如下:
location / {
proxy_pass http://upstream的服务名称;
}
五.Nginx动静分离
Nginx并发能力公式:
配置文件中worker_processes*worker_connections/2|4=Nginx的并发能力
动态资源需要/4
静态资源/2
Nginx通过动静分离,来提高并发能力。
5.1 动态资源代理配置
与上面负载均衡配置情况是一样的
upstream 服务名称{
server ip:port;
server ip:port;
}
在location块配置如下:
location / {
proxy_pass http://upstream的服务名称;
}
5.2 静态资源代理配置
#配置如下:
location / {
root 静态资源路径;
index 默认访问路径下的什么资源;
autoindex on; #代表展示静态资源的全部内容,以列表的形式展开。
}
六.Nginx集群
对于服务器我们可以配置多个来防止某一台服务器宕机,但是如果只有一个Nginx,也有可能出现宕机的情况,所以我们需要配置Nginx集群来解决这个问题。
其中需要keepalived与haproxy,keepalived帮我们监听Nginx是否运行正常,haproxy提供一个虚拟的路径,统一接受客户端的请求。
Nginx集群
对于服务器我们可以配置多个来防止某一台服务器宕机,但是如果只有一个Nginx,也有可能出现宕机的情况,所以我们需要配置Nginx集群来解决这个问题。
其中需要keepalived与haproxy,keepalived帮我们监听Nginx是否运行正常,haproxy提供一个虚拟的路径,统一接受客户端的请求。