设为首页 收藏本站
查看: 1133|回复: 0

[经验分享] nginx+多tomcat实现单IP、多域名、多站点的访问

[复制链接]

尚未签到

发表于 2016-12-28 09:17:32 | 显示全部楼层 |阅读模式
其实这个问题分为两个子问题来解决:
1.如何实现单IP多tomcat站点
2.对于多域名的多个站点如何通过nginx分发访问
问题一:解决方案又分为两种:
a.单实例tomcat配置多个host站点
这种方法有一个缺点就是无法分站点调试,如果一个站点出了问题,关服务进行调试会停掉所有站点(不过这个方案就不会涉及到第二个问题,因为这样单实例无法实现多个站点对应多个顶级域名)
b.多实例tomcat配置实现单机多站点
这个方法很简单,就相当于把tomcat拷贝多份,然后修改各个tomcat的server.xml中的shutdown,http以及AJP1.3的端口,然后将tomcat实例启动即可。不过这个对内存要求比较高,因为每个tomcat跑起来之后可能会占200M左右内存,这还是对并发量比较小的,如果实例数一多起来,比如我们现在有个项目需要20多个站点放在一台服务器上(主要是贪腐无处不在,钱有但是不给你买硬件。。无力吐槽。。。。),这样4G多的内存就吃掉了。
另外一点就是通过多实例配置多站点会有另外一个问题,可能每一个站点都有一个单独的顶级域名,而域名的解析止于IP,因此端口的映射需要自己另做,这就涉及到了第二个问题如何解决了。
具体如何配置多实例实现单机多站点,可以参照下面几个链接:
http://weihaoma.cn/archives/67
http://www.ff-bb.cn/logs/109466274.html
上面我说到可能会有内存溢出的问题,可以看看第二个链接中的解决方案,直接修改tomcat的内存参数,如果是linux直接修改catalina.sh即可,如果是windows的话需要修改注册表中Java的参数:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6.0\Parameters\Java
总体来讲问题一比较好解决,原理上很简单,单个实例无法调试就用多个实例,多个实例需要多个端口,当内存不足时修改它的启动参数,然后重启就行了。
问题二:这里我只说用nginx怎么解决,网上有人apache貌似也能解决,我没有弄成功
nginx是俄罗斯人写的一个开源的web服务器,国内的使用先驱是淘宝,而且貌似他们的工程师在写一本叫《nginx从入门到精通》的书。nginx是一个非常优秀的web服务器,可以说前途一片光明。
一般nginx现在多用户做负载均衡,配合tomcat或者apache做分发,网上这个讲的也很多,但是我要解决的问题不太相同,怎么样通过域名解析到不同端口,这得先说以下nginx的配置文件。
nginx配置文件位于conf/nginx.conf,它最主要的部分是http部分,这里最重要的两个配置项是upstream,server,这两个项都可以有多个配置。

#需要进行负载均衡的站点  
#其中server是其中负载均衡的一个节点www.aaa.com  
upstream www.aaa.com {   
server 192.168.0.1:8080 weight=1;   
server 192.168.0.2:8080 weight=2;  
server 192.168.0.1:8081 weight=3;  
}   
#第二个网站的www.bbb.com的负载均衡的节点  
upstream www.bbb.com {   
server 192.168.1.1:8080 ;   
server 192.168.1.2:8080 ;   
server 192.168.1.3:8080 ;   
ip_hash;   
}   
#同一服务器转发2个不同域名进行负载均衡  
#www.aaa.com的server  
server  
{  
listen       80;  
server_name  www.aaa.com;  
location / {   
index  index.html index.jsp;   
#这里的proxy_pass转发的是upstream的名字www.aaa.com  
proxy_pass  http://www.aaa.com;   
proxy_set_header    X-Real-IP   $remote_addr;   
client_max_body_size    100m;   
}   
#limit_conn   crawler  20;      
}  
server  
{  
listen       80;  
server_name  www.bbb.com;  
location / {   
index  index.html index.jsp;   
#这里的proxy_pass转发的是upstream的名字www.bbb.com  
proxy_pass  http://www.bbb.com;   
proxy_set_header    X-Real-IP   $remote_addr;   
client_max_body_size    100m;   
}   
#limit_conn   crawler  20;      
}  


tomcat配置 :

//接下来更改三个端口号
<Server port="18005" shutdown="SHUTDOWN">

<Connector port="8801" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding='UTF-8'/>

//tomcatX 在这里表示不同的tomcat,我的两个 tomcat 分别使用 tomcat1和tomcat2;  这个设置是主要用以tomcat的集群。
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" jvmRoute=" tomcatX"/>


DNS服务器将域名解析到IP地址,nginx作为反向代理收到请求之后根据配置文件将请求发送到对应的tomcat实例。
我测试时nginx反向代理放在我本机上,tomcat实例在同一台远程服务器,在hosts文件中虚拟两个域名假设为两实例中的站点的域名。
hosts文件路径C:\Windows\System32\drivers\etc

127.0.0.1       www.aaa.com
127.0.0.1       www.bbb.com


我已经测试过,这个方案是可行的,参考链接如下:
http://saiyaren.iyunv.com/blog/1405728
http://yangzb.iyunv.com/blog/560421
http://www.linuxde.net/2012/06/11006.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-320463-1-1.html 上篇帖子: 信息、分析-统计nginx日志的python实现 -by小雨 下篇帖子: nginx+多tomcat实现单IP、多域名、多站点的访问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表