nginx反向代理tomcat
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx反向代理tomcat相关的知识,希望对你有一定的参考价值。
回顾:tomcat配置和应用
server.xml, webapp的组织形式, 应用程序的部署, LAMT, LNMT, LNAMT;
server.xml:
<server>
<service>
<connector port="8080" />
<connector port="8009" protocol="AJP/1.3" />
<engine >
<Host />
<Host >
<Context path="" docBase="" />
</Host>
</engine>
</service>
</server>
webapp下需要建立的目录:
/
classes
lib
META-INF
WEB-INF
部署:
冷部署:
热部署:manager app, ant, tcd 注:tcd是一种tomcat的远程部署方式
会话保持的几种方式:
1、session sticky 注: 会话粘性
source ip 注: 基于ip地址的会话保持
cookie 注: 基于cookie绑定
2、session cluster: 注:session集群,不同节点之间可以通过session复制的方式来同步session
3、session server 注: session服务器,专门建立一个服务器来保存session
session server上装一个memcache或者redis
它们是用key-value技术实现的
tomcat的负载均衡实现方式,
1、 nginx做反向代理 nginx+tomcat
2、 apache做方向代理 apache+tomcat
apache实现反向代3种方式需要的模块
1、apache:
mod_proxy
mod_proxy_http
mod_proxy_balancer
tomcat:
http connector
2 、apache:
mod_proxy
mod_proxy_ajp
mod_proxy_balancer
tomcat:
ajp connector
3、 apache:
mod_jk
tomcat:
ajp connector
下面演示如果通过nginx实现反向代理tomcat
实验部署:
1、三个节点,第一个几点的ip地址为172.16.0.131,后两个几点分别为172.16.0.134和172.16.0.135
2、后两个节点分别准备jdk和tomcat的安装包
3、第一个节点安装nginx
具体步骤:
1、在172.16.0.134上
# rpm -ivh jdk-8u151-linux-x64.rpm
# tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local/
# cd /usr/local
# ln -sv apache-tomcat-8.0.23 tomcat
# vim /etc/profile.d/java.sh
添加如下内容
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
# vim /etc/profile.d/tomcat.sh
添加如下内容
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
# . /etc/profile.d/java.sh
# . /etc/profile.d/tomcat.sh
配置tomcat的server.xml
# cd /usr/local/tomcat/conf
# cp server.xml server.xml.bak
# vim server.xml
具体配置见下图
# mkdir -pv /data/webapps/ROOT
# cd mkdir -pv /data/webapps/logs
# mkdir -pv /data/webapps/ROOT/{classes,lib,META-INF,WEB-INF,}
# vim index.jsp
添加
# catalina.sh configtest
# catalina.sh start
2、在172.16.0.135上
前面步骤和第一台主机设置一样,只是后面两张图中的内容要修改一下。
第一项修改默认的virtualhost的name选项
第二项修改defaulthost选项
第三项jvmRoute选项
3、在172.16.0.131上
#yum install -y nginx
#vim /etc/nginx/nginx.conf
添加下面内容
#vim conf.d/default.conf
配置完成
# service nginx restart
# ss -tnl 检查是否开启了80端口
# 在浏览器中输入172.16.0.131/index.jsp
如下效果
至此,基于nginx反向代理的tomcat配置完成。
基于apache反向代理的tomcat有三种方法实现在centos7上面
这里有点一定要说明,本来我在centos6上先通过编译安装httpd2.4实现apache的反向代理.
确发现开启了httpd的反向代理模块以后,httpd启动以后,怎么也找不到80端口.
我试了前后七八个小时,网上各种查资料.
最后得出结论,编译安装的httpd2.4.2和http2.4.28这两个版本想做反代都不能实现,我觉得这是一个及其重要的经验。
第一种方法的实现:
#/etc/httpd/conf/conf.d
# vim vhost.conf
t添加
<proxy balancer://lbcluster1>
BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB
</proxy>
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location />
Require all granted
</Location>
</VirtualHost>
如果需要会话绑定:
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbcluster1>
BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB
ProxySet stickysession=ROUTEID
</proxy>
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location />
Require all granted
</Location>
</VirtualHost>
第二种方法的实现:
#/etc/httpd/conf/conf.d
# vim vhost.conf
t添加
#Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbcluster1>
BalancerMember ajp://172.16.100.68:8009 loadfactor=10 route=TomcatA
BalancerMember ajp://172.16.100.69:8009 loadfactor=10 route=TomcatB
ProxySet stickysession=ROUTEID
</proxy>
<VirtualHost *:80>
ServerName web1.magedu.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location />
Require all granted
</Location>
</VirtualHost>
补充:mod_proxy_balancer模块内置的manager:
<Location /balancer-manager>
SetHandler balancer-manager
Proxypass !
Order Deny,Allow
Allow from all
</Location>
第三种方式:
mod_jk:额外编译安装
(1) 反向代理
模块配置文件:mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* TomcatA
JkMount /status/ stat1
workers配置文件:workers.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=172.16.100.68
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status
注意:status的访问要做访问控制;
以上是关于nginx反向代理tomcat的主要内容,如果未能解决你的问题,请参考以下文章