文章目录
- 2.1 Nginx解决跨域问题
- 2.2 Nginx解决静态资源防盗链问题
- 2.3 Nginx的模块化体系
- 2.4 Nginx集群负载均衡
- 2.5 四层负载均衡和七层负载均衡
- 2.6 使用Nginx构建Tomcat集群
2.1 Nginx解决跨域问题
所谓的跨域问题是指,比如我们现在我们访问域名www.imooc.com,在主页我们可能要同于异步访问淘宝和其它域名,这些域名与imooc不属于同一个域,而这些跨域访问通常是被拒绝的,这个问题就是所谓的跨域问题,解决跨域问题我们是通过Cors跨域资源共享来解决的,其允许浏览器向跨Origin的服务器发起js请求获取响应,实现跨域的形式通常有三种,分别是Jsonp、springBoot Cors 和Nginx。下面展示如何在nginx中配置(现在访问80端口,就支持跨域了):
- 首先在本地准备一个html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<h1>test</h1>
<div id="nginxCors"></div>
<script type="text/javascript">
var index=new Vue({
el:"#nginxCors",
data:{
},
created() {
this.testCors();
},
methods: {
testCors(){
var serverUrl="http://www.imooc.com:90/images/logo.jpg";
//这里我在host文件中对域名进行了绑定,为原来的ip地址指定了域名(这里可以童工修改host文件或通过软件SwitchHost)
axios.get(serverUrl,{}).then(res=>
{
console.log(res);
});
}
},
})
</script>
</body>
</html>
- 运行文件后出现跨域问题
- 配置nginx重启nginx解决跨域问题
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如Get/Post/Put/Delete
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
- 再次运行跨域问题得到结果,正确获取到数据
2.2 Nginx解决静态资源防盗链问题
为了防止其它站点访问本站点的图片(或其它静态资源),我们可以对图片资源设置静态防盗链
- 修改html文件并运行
可以发现成功访问到了图片
- 配置nginx防盗链
#对源站点进行验证
valid_referers *.imooc.com;
#非法引用进行下面判断
if($invalid_referer){
return 404;
}
现在图片文件就请求不了了,并返回了404
2.3 Nginx的模块化体系
对于nginx,首先它有一个nginx core,是nginx最核心的内容,里面实现了底层的一些通信协议,并为其它nginx的其他模块和进程提供了运行的环境;nginx core主要分为两个主要模块,其中一个是http模块,另一个是mail模块。主要组成如下:
event module:事件模块
phase handler:用于处理客户端的请求,处理后负责内容的一个响应
output filter:在phase handler处理完后,会经过一个这个过滤器,它会过滤掉一部分内容然后返回给浏览器
upstream:反向代理模块,它会把用户请求转发到真实的服务器地址,进行响应
load balancer:负载均衡器,用于实现集群
extend module:继承模块,用于实现第三方
2.4 Nginx集群负载均衡
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
用户的请求痛殴Nginx处理,分发到不同的服务器进行处理,这些服务器我们叫做upstream
2.5 四层负载均衡和七层负载均衡
四层负载均衡指的是通过ip+端口进行转发;七层负载均衡指的是通过URL、浏览器类别、语言等应用层信息进行转发。七层负载均衡举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。(负载均衡原理可以看我这个ppt)这里不作详细讲解。
2.6 使用Nginx构建Tomcat集群
创建四台虚拟机,一台作为Nginx代理服务器,另外三台作为Tomcat服务器,其IP地址如下
服务器名称 | IP地址 |
Nginx代理服务器 | 172.16.23.145 |
tomcat1 | 172.16.23.146 |
tomcat2 | 172.16.23.147 |
tomcat3 | 172.16.23.148 |
全部使用FinalShell进行了连接,集群服务器都已经安装了Tomcat服务
每个集群服务器的Tomcat都已经启动(注意关闭防火墙),下面在Nginx服务器的conf文件中进行上游配置
#配置上游服务器
upstream tomcats{
server 172.16.23.146:8080;
server 172.16.23.147:8080;
server 172.16.23.148:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location /{
proxy_pass http://tomcats;
}
}
在switchHost中配置域名映射(也可以直接在本机的host文件中配置)
以上Tomcat的一个简单集群就搭建完了