• nginx负载均衡和反向代理跨域


    转自:  https://blog.csdn.net/zhoulu001/article/details/53074845

    nginx是一个高性能的Http服务器,有两个默认的模块proxy_passupstreamproxy_pass可以很方便的进行反向代理,然后配合upstream可以很方便的实现负载均衡。

        在nginx的根路径下的conf文件夹下的nginx.conf就是我们需要关注的配置文件。

       1. proxy_pass

        在serverlisten指定了服务器的断开,server_name指定了域名,location过滤访问的请求,proxy_pass设置了一个url,意思就是当前反向代理的目标服务器地址。

        所以当我们在本地访问http://localhost:4444的时候,nginx会将我们的请求反向代理到proxy_pass指定的目标服务器。

         2.upstream

        上面的请求都会反向代理到proxy_pass设置的目标服务器上,但如果目标服务器宕机了怎么办?这个时候我们可以设置负责均衡,upstream就可以派上用场了。

        upstream可以设置多台服务器,然后通过proxy_pass指向upstream,从而当我们访问http://localhost:4444的时候,就反向代理到了upstream中的某一台服务器中了。

        而具体是反向代理到upstream中的哪一台服务器,我么可以设置对应的算法。

        i).默认是采用轮询机制,就是采用轮询的方式反向代理;

        ii).设置权重weight,我们可以通过设置weight来指定服务器被访问的权重,权重越大,反向代理过去的机会就越大;

        iii). ip_hash的方式:因为每一个ip对应一个唯一的hash值,这样来自同一个ip的请求会反向代理到特定的某一台机器上。

         3.跨域

          前端跨域有很多方式,比如JSONP,服务端代理和html5access-control-allow-orgin等。但这一一些方式都需要根据需要修改相关的前端或者后端代码。但nginx跨域不需要修改任何代码。

        从上面我们知道,nginxproxy_pass可以将我们的请求通过proxy_pass反向代理到目标服务器上,nginx跨域就是利用反向代理来实现。比如我们需要访问某个后端api,假设它的地址是http:://xxxxx/api/myrequest,并且后端api的地址都是以http;//xxxxx/api开头。因为使用ajax直接访问该地址肯定存在跨域问题,那么如何配置nginx的配置文件呢?

        只增加一个对应的location去过滤请求,然后进行反向代理,我们捕捉所有以/api开头的请求。

        有两种方式:

        i. 方式一:

    1.  
      location /api/ {
    2.  
       
    3.  
      proxy_pass http://xxxxx/api;
    4.  
      }

       ii. 方式二:

        

    1.  
      location /api/ {
    2.  
       
    3.  
      proxy_pass http://xxxxx/api/;
    4.  
      }

        方式二比方式一多了一个/。

        区别就是:

        方式一: 如果用户访问的是http://?????/api/getInfo,反向代理到的是http://xxxxx/api/getInfo

        方式二: 如果用户访问的是http://?????/api/getInfo,反向代理到的是http://xxxxx/getInfo

    这样就达到了跨域了。

  • 相关阅读:
    怎样确定需求
    xampp进程和非进程执行
    将博客搬至CSDN
    管理心得
    数据库性能优化
    开发、架构总结
    activeMQ总结
    php数组操作函数
    Examples_08_08
    保险采购单的修复
  • 原文地址:https://www.cnblogs.com/ziyunlong/p/9585618.html
Copyright © 2020-2023  润新知