zoukankan      html  css  js  c++  java
  • Nginx负载趟过的坑

        在项目中经常会碰到需要利用Nginx作负载,最近在利用Nginx作负载均衡器时碰到一个很奇葩的问题。

        本来按照以前的实现将打好的A.war包直接放到tomcat根目录(webapps)下,然后按照如下方式配置Nginx即可实现负载均衡:

    upstream KV{
       ip_hash;
       server 10.68.234.160:8080;
       server 10.68.234.161:8080;
       server 10.68.234.162:8080;
       server 10.68.234.163:8080;
    }
    
    upstream KY{
       ip_hash;
       server 10.68.234.160:9080;
       server 10.68.234.161:9080;
       server 10.68.234.162:9080;
       server 10.68.234.163:9080;
    }
    
    server {
      listen   80;
      server_name localhost;
      charset utf-8;
      
      locaion ^~/mm/ {
          proxy_pass http://KV;
      }  
    
        locaion ^~/yy/ {
          proxy_pass http://KY;
      }  
      ...
    }
    

       这样调用..../mm/yy即可通过Nginx即可实现负载均衡。

       然而在应用上线时,方案评审小组却告之二组不同的应用必须指定相应的上下文,假设我们都指定对应上下文为test,那么如果还按照上述方式配置Nginx就会发现容器始终匹配不到访问的URL。

      跟踪代码并经过多次测试发现:Nginx中的路径是通过#分割的,如果配置为/,那么Nginx是无法匹配到正确的访问路径的。

      根据上面的测试调整War布署方式:将编译生成的A.war重命名为test#A.war,然后放到tomcat的webapps根目录下,待tomcat启动后,我们发现webapps下产生test#A目录,此时对应的Nginx.conf依然可以参考上述配置:

    upstream KV {
      ip_hash;
      server 10.63.79.170:9080;
      server 10.63.79.171:9080;
    }
    
    server {
      listen 80;
      server_name localhost;
    }
    
    location / {
      proxy_pass http://KV;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

     另外:基于DubboX框架利用Tomcat+Nginx布署应用时,需要注意如下几点:

    <dubbo:protocol name="rest" port="7090" threads="1000" contextpath="mmservice/test" server="servlet" accepts="500" extension="com.test.provider.ExceptionMapperProvider"/>
    

     DubboX中的port与conextpath必须与tomcat中的port和contextpath保持一致(tomcat中的port在server.xml中进行配置;conextpath即为上文所描述的mmservice#test.war)

  • 相关阅读:
    转载【Ubuntu】Ubuntu14.04虚拟机调整窗口大小自适应VMware14窗口
    【ubuntu】安装输入法
    【虚拟机ubuntu】安装之后安装VMware tools
    【虚拟机ubuntu设置ssh】ssh连不上问题解决方法
    JavaScript常用函数
    Label自适应高度
    xcode 删除文件后编译会出现*** is missing from working copy
    找window的三种方法
    怎么查看Mac电脑的开机记录?
    iOS 跳转到系统的设置界面
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5910984.html
Copyright © 2011-2022 走看看