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)
Nginx负载趟过的坑的更多相关文章
- FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]
		1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google. ... 
- [转]Nginx负载均衡原理初解
		什么是负载均衡 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群. 负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器 ... 
- nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查
		nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ... 
- 对比Haproxy和Nginx负载均衡效果
		为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ... 
- nginx负载均衡集群
		nginx负载均衡集群 0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ... 
- 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统
		引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ... 
- nginx负载均衡基于ip_hash的session粘帖
		nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ... 
- Net分布式系统之二:CentOS系统搭建Nginx负载均衡
		一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ... 
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
		上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ... 
随机推荐
- HTML要点(五)<iframe>标签
			浏览器支持:全部支持 定义和用法 iframe 元素会创建包含另外一个文档的内联框架(即行内框架). HTML 与 XHTML 之间的差异 在 HTML 4.1 Strict DTD 和 XHTML ... 
- Jquery 提示
			1 文字提示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ... 
- C#委托的介绍(delegate、Action、Func、predicate)(转)
			委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Deleg ... 
- Java数据结构之树和二叉树
			从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ... 
- 如何自学Java
			转自:http://www.360doc.com/content/12/0624/19/5856897_220191533.shtml JAVA自学之路 JAVA自学之路 一:学会选择 为了就业, ... 
- 浅析jQuery框架与构造对象
			这是一些分析jQuery框架的文字 面向的读者应具备以下要求 1.非常熟悉HTML 2.非常熟悉javascript语法知识 3.熟悉javascript面向对象方面的知识 4.熟练使用jQue ... 
- Codeforces Beta Round #12 (Div 2 Only) D. Ball sort/map
			D. Ball Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/12/D D ... 
- C#封装、多态、抽象、接口、匿名方法等学习
			1:封装 将对象进行封装,并不等于将整个对象完全包裹起来,而是根据实际需要,设置一定的访问权限,用户根据不同的权限调用对象提供的功能,在C#语言中,可以使用修饰符public.internal.pro ... 
- vs 设置生成的实体为复数
- android仿win8 metro磁贴布局
			代码下载 //更新代码, 这里是更新后的代码 //////////////////////// 1,含一个图片无限滚动的控件,自己实现的 2.可新增删除每个磁贴 3.来个图片吧 ////* ... 
