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 ...
随机推荐
- Castle IOC容器构建配置详解(一)
主要内容 1.配置什么 2.几种配置方式 3.Include 介绍 4.Properties介绍 5.条件状态 一.配置什么 Castle IOC中并不像Spring.net那样贯穿着一个思想就是一切 ...
- 同时使用Binding&StringFormat 显示Text【项目】
Case ID (?unit) 红色的字根据一个后台boolean来做trigger,可以是Case or Open 蓝色的字binding到后台的一个string属性来切换任意的Unit单位 这样一 ...
- android 48dp美化
48dp
- GetSafeHwnd()函数解释[转]
当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ ...
- 【转】解决Fragment already active方法
http://blog.csdn.net/u011730649/article/details/43227721 今天在项目中使用Fragment的时候出现这样的错误: 01-28 10:53:34. ...
- Google JavaScript 语言规范
变量 ▶ 声明变量必须加上 var 关键字. 常量 ▶ 常量的形式如: NAMES_LIKE_THIS, 即使用大写字符, 并用下划线分隔. 你也可用 @const 标记来指明它是一个常量. 但请 ...
- sqldependency 支持的select
https://msdn.microsoft.com/library/ms181122.aspx 支持的 SELECT 语句 满足下列要求的 SELECT 语句支持查询通知: 必须显式说明 SEL ...
- Android开发代码混淆经验(Eclipse)
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 2.编辑项目下的proguard-project.txt,添加不需要混淆的规则(model.泛型.反射.第 ...
- VS2010中文/vs2008英文版/vs2005下载地址
ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467 ...
- 《UCD火花集1-2》读后感
一个多月的时间都没有更新博客了,只因为9月份有了其他的任务,耽搁了一 ...