• 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)

  • 相关阅读:
    libyuv编译(各平台)【转】
    /dev/mem可没那么简单【转】
    嵌入式Linux上通过boa服务器实现cgi/html的web上网【转】
    linux select函数详解【转】
    dpkg: error processing package bluez (--configure) 解决方法【转】
    Linux内核中的中断栈与内核栈的补充说明【转】
    Linux内核中断引入用户空间(异步通知机制)【转】
    用户空间与内核空间,进程上下文与中断上下文[总结]【转】
    linux 路由表设置 之 route 指令详解【转】
    自己动手做聊天机器人 一-涉及知识【转】
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5910984.html
Copyright © 2020-2023  润新知