文章目录

  • 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端口,就支持跨域了):

  1. 首先在本地准备一个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>
  1. 运行文件后出现跨域问题
  2. 配置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' *;

nginx允许host nginx允许跨域还是报跨域_负载均衡

  1. 再次运行跨域问题得到结果,正确获取到数据

nginx允许host nginx允许跨域还是报跨域_Nginx_02

2.2 Nginx解决静态资源防盗链问题

为了防止其它站点访问本站点的图片(或其它静态资源),我们可以对图片资源设置静态防盗链

  1. 修改html文件并运行

可以发现成功访问到了图片

nginx允许host nginx允许跨域还是报跨域_Nginx_03

  1. 配置nginx防盗链
#对源站点进行验证
          valid_referers *.imooc.com; 
         #非法引用进行下面判断
          if($invalid_referer){
                return 404;
        }

nginx允许host nginx允许跨域还是报跨域_服务器_04


现在图片文件就请求不了了,并返回了404

nginx允许host nginx允许跨域还是报跨域_负载均衡_05

2.3 Nginx的模块化体系

对于nginx,首先它有一个nginx core,是nginx最核心的内容,里面实现了底层的一些通信协议,并为其它nginx的其他模块和进程提供了运行的环境;nginx core主要分为两个主要模块,其中一个是http模块,另一个是mail模块。主要组成如下:

nginx允许host nginx允许跨域还是报跨域_Nginx_06


event module:事件模块

phase handler:用于处理客户端的请求,处理后负责内容的一个响应

output filter:在phase handler处理完后,会经过一个这个过滤器,它会过滤掉一部分内容然后返回给浏览器

upstream:反向代理模块,它会把用户请求转发到真实的服务器地址,进行响应

load balancer:负载均衡器,用于实现集群

extend module:继承模块,用于实现第三方

2.4 Nginx集群负载均衡

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

nginx允许host nginx允许跨域还是报跨域_Nginx_07

用户的请求痛殴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

nginx允许host nginx允许跨域还是报跨域_Nginx_08

全部使用FinalShell进行了连接,集群服务器都已经安装了Tomcat服务

nginx允许host nginx允许跨域还是报跨域_nginx允许host_09

每个集群服务器的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文件中配置)

nginx允许host nginx允许跨域还是报跨域_nginx允许host_10


以上Tomcat的一个简单集群就搭建完了