nginx反向代理tomcat
阿新 • • 發佈:2018-01-16
text vhost image index.jsp reverse level gte lamt 反代
回顧: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