前言
一、反向代理
先看一下需求:
一共两个需求:
第一个是一台Tomcat,只需要用Nginx反向代理将链接指向本地Tomcat即可
第二个是两台Tomcat,需要用Nginx反向代理将将不同规则的连接指向不同的服务器
1.1先来完成需求一:
1)部署Tomcat,监听端口号为8080,启动Tomcat(如果服务器没有配置安装JDK的话需要先装一下)
2)修改nginx配置文件,并重新reload
执行./nginx -s reload
3)测试访问9001端口(因为我的Nginx配的默认端口是9001),可以看到正常返回了Tomcat的页面,所以反向代理成功
在这里反向代理的好处是隐藏了真实服务的地址
1.2完成需求二
首先再部署一台Tomcat,监听端口8081
我们看下两台Tomcat的区别
接下来配置nginx,分别将两个不同的链接转到不同的tomcat服务器
测试下:
这里主要就是多location的使用,这里的nginx中server/location就好比tomcat中的 Host/Context
location的语法如下:
location [=|~|~*|^~] /uri/ { ... }
在nginx配置文件中,location主要有这几种形式:
1)正则匹配 location ~ /demo { }
2)不区分大小写的正则匹配 location ~* /demo { }
3)匹配路径的前缀 location ^~ /demo { }
4)精确匹配 location = /demo { }
5)普通路径前缀匹配 location /demo { }
优先级:4>3>2>1>5
二、负载均衡
当一个url/项目的访问量越来越大时,那么对应的目标服务器就需要进行集群化,那么一个集群中有多个机器的情况下,怎样均衡的分配请求,就是负载均衡了
需求(其实是对反向代理第二个需求的扩展):
再复制一个Tomcat,监听8082端口
然后修改nginx配置:
测试就会发现每次请求都会换一台服务器(我们已经在Tomcat的index中做了标记)这是为什么?
是运气还是说有什么其他的策略?我们来看一下负载均衡的几种策略
2.1 轮询
默认策略(所以我们并没有配置也是一台一次交替使用),每个请求按时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除
upstream demoServer{
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
location /abc {
proxy_pass http://demoServer/;
}
2.2weight(权重)
weight代表权重,默认每一个负载的服务器都为1,权重越高那么被分配的请求越多(用于服务器性能不均衡的场景)
upstream demoServer{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8082 weight=3;
}
location /abc {
proxy_pass http://demoServer/;
}
2.3ip_hash
每个请求按照ip的hash结果分配,每一个客户端的请求会固定分配到同一个目标服务器处理,可以解决session问题
upstream demoServer{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
location /abc {
proxy_pass http://demoServer/;
}
三、动静分离
动静分离就是将动态资源和静态资源的请求处理分配到不同的服务器上,比较经典的组合就是 Nginx+Tomcat架构(Nginx处理静态资源请求,Tomcat处理动态资源请求)
首先在/usr/local/nginx目录下创建一个staticData的文件夹,再在staticData文件夹中创建一个static文件夹,里面放一个abc.html文件,内容如下:
然后修改nginx配置文件nginx.conf,添加如下location
然后访问目标文件,成功了