nginx+httpd+tomcat(三)
来源:互联网 发布:最新推广软件 编辑:程序博客网 时间:2024/06/05 06:30
三台主机:nginx,httpd,tomcat均使用yum安装,和手动安装的路径会有所不同
host1:172.16.52.58 nginx && httpd
host2:172.16.52.59 tomcat1
host3:172.16.52.60 tomcat3
1.配置httpd反代至tomcat
1.1配置tomcat1,设置虚拟机名
</Host>
<Host name="www.a2.com" appBase="webapps">
<Context path="" docBase="myapp" />
</Host>
1.2 配置host3,用httpd反代至host2的tomcat,要在host3上面的hosts主机里面添加host2的主机名解析,接着配置如下
[root@localhost conf.d]# cat /etc/httpd/conf.d/http_tomcat.conf
<VirtualHost *:80>ServerName www.b1.com
ProxyRequests Off //是否开启正向代理功能,是由mod_proxy_http提供此功能
ProxyVia On
ProxyPreserveHost On 启用此功能,代理会将请求报文中的Host发送给后端服务器,而不再使用ProxyPass使用的地址,此选项就是用于在反向代理中支持虚拟机
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://www.a2.com:8080/
ProxyPassReverse / http://www.a2.com:8080/
<Location />
Require all granted
</Location>
</VirtualHost>
1.3测试: 添加hosts主机名解析后,用浏览器访问http://www.b1.com,结果会得到tomcat的首页,也不知道为啥,如果想真正代理至tomcat的虚拟主机,需要将tomcat里面的<Engine defaulthost="localhost">更改为<Engine defaulthost="www.a1.com">,才会成功
1.4 如果是基于ajp协议进行代理的话,
[root@localhost conf.d]# mv http_tomcat.conf http_tomcat.confbak
[root@localhost conf.d]# cat http_tomcat2.conf
<VirtualHost *:80>
ServerName www.b1.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost Off
<Proxy *>
Require all granted
</Proxy>
ProxyPass / ajp://www.a1.com:8009/
ProxyPassReverse / ajp://www.a1.com:8009/
<Location />
Require all granted
</Location>
</VirtualHost>
1.5 配置httpd负载均衡至tomcat:
需要模块:负载均衡模块mod_proxy_balcancer, 代理模块mod_proxy以及它的子模块 mod_proxy_http
tomcat连接器connector: http connector
1.5.1 基于
配置tomcat
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="www.a2.com" appBase="webapps">
<Context path="" docBase="myapp" />
</Host>
</Engine>
vim /etc/httpd/conf.d/http_cluster_tomcat.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED ///实现会话绑定功能,添加Cookie首部
<Proxy balancer://balancerserver>
BalancerMember http://172.16.52.59:8080 loadfactor=3 route=Tomcat1
BalancerMember http://172.16.52.60:8080 loadfactor=4 route=Tomcat2
ProxySet stickysession=ROUTEID ///实现会话绑定功能
</Proxy>
<VirtualHost *:80>
ServerName www.c1.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://balancerserver
ProxyPassReverse / balancer://balancerserver
<Location />
Require all granted
</Location>
</VirtualHost>
///或者是基于ajp协议配置httpd虚拟机,只需要修改代码中黑色的部分,协议即可
需要模块:负载均衡模块mod_proxy_balcancer, 代理模块mod_proxy以及它的子模块 mod_proxy_http
tomcat连接器connector: ajp connector
[root@zhuyuan conf.d]# cat http_cluster_tomcat.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://balancerserver>
BalancerMember ajp://172.16.52.59:8009 loadfactor=3 route=Tomcat1
BalancerMember ajp://172.16.52.60:8009 loadfactor=4 route=Tomcat2
ProxySet stickysession=ROUTEID
</Proxy>
<VirtualHost *:80>
ServerName www.c1.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://balancerserver
ProxyPassReverse / balancer://balancerserver
<Location />
Require all granted
</Location>
</VirtualHost>
///或者是基于ajp协议配置httpd虚拟机,只需要修改代码中黑色的部分,协议即可
1.5.2 基于httpd的mod_jk实现对tomcat的反代和负载均衡
需要模块:负载均衡模块mod_proxy_balcancer, 代理模块mod_proxy以及它的子模块 mod_jk
tomcat连接器connector: ajp connector
首先需要动态加载mod_jk模块,mod_jk是apache的一个模块,
tar xf tomcat-connectors-1.2.40-src.tar.gz -C /usr/local/
cd tomcat-connectors-1.2.40-src/native
yum install -y httpd-devel
./configure --with-apxs
make && make install
cp /usr/lib64/httpd/modules/mod_jk.so /etc/httpd/modules/
vim /etc/httpd/conf.modules.d/00-jk.conf ///也可以将配置写在其他文件中
LoadModule jk_module modules/mod_jk.so
httpd -t |grep jk ///至此动态模块加载完成
(1)实现反向代理:
vim conf.d/mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* Tomcat1
JkMount /status/ stat1
定义workers.properties
cat conf/workers.properties
worker.list=Tomcat1,stat1
worker.Tomcat1.port=8009
worker.Tomcat1.host=172.16.52.59
worker.Tomcat1.type=ajp13
worker.Tomcat1.lbfactor=1
worker.stat1.type = status
(2)实现负载均衡
cat conf.d/mod_jk_cluster.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers_cluster.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* Tomcatcluster
JkMount /status/ stat1
定义worker_cluster.properties
cat conf/workers_cluster.properties
worker.list = Tomcatcluster,stat1
worker.Tomcat1.type = ajp13
worker.Tomcat1.host = 172.16.52.59
worker.Tomcat1.port = 8009
worker.Tomcat1.lbfactor = 5
worker.Tomcat2.type = ajp13
worker.Tomcat2.host = 172.16.52.60
worker.Tomcat2.port = 8009
worker.Tomcat2.lbfactor = 5
worker.Tomcatcluster.type = lb
worker.Tomcatcluster.sticky_session = 0 ///这里若设置为0就是不做会话绑定,设置为1就是做会话绑定
worker.Tomcatcluster.balance_workers = Tomcat1, Tomcat2
worker.stat1.type = status
测试:http://172.16.52.58/
1.6 使用mod_proxy_balancer模块
cat http_balancer_tomcat.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://balancerserver>
BalancerMember ajp://172.16.52.59:8009 loadfactor=3 route=Tomcat1
BalancerMember ajp://172.16.52.60:8009 loadfactor=4 route=Tomcat2
ProxySet stickysession=ROUTEID
</Proxy>
<VirtualHost *:80>
ServerName www.c1.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://balancerserver
ProxyPassReverse / balancer://balancerserver
<Location />
Require all granted
</Location>
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
</VirtualHost>
测试:http://172.16.52.58/balancer-manager ,如图:感觉略清白。。。。
2.配置host1的nginx反代负载均衡至host2和host3的tomcat
2.1 配置host1的nginx的backend主机,做负载均衡集群,在http选项里面添加,即下面绿色部分
vim /etc/nginx/nginx.conf
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream tomcatserver {
# ip_hash; //开启会话绑定功能
server www.a2.com:8080;
server www.b2.com:8080;
}
//这里的www.a1.com主机名均可以换位ip地址,这里是基于虚拟机的代理,但是不知道httpd为啥不行,可能是少具体配置
2.2 在host1的nginx里面将配置的backend server添加至代理,即上面的upstream 的名称,将来自对.jsp和.do结尾的文件的请求都转发至后端tomcat
location ~* \.(jsp|do) {
proxy_pass http://tomcatserver;
}
2.3 配置host2的tomcat 选项,host2和host3的配置保持一致,因为是负载均衡。
vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="www.a2.com" appBase="webapps">
<Context path="" docBase="myapp" />
</Host>
</Engine>
2.4 配置host3 的tomcat虚拟主机
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="www.b2.com" appBase="webapps">
<Context path="" docBase="myapp">
</Context>
</Host>
</Engine>
2.5测试: http://172.16.52.58/myapp/index.jsp 这里需要输入全路径,没有配置cookie,所以不知道访问的是后端哪台主机。。。
- nginx+httpd+tomcat(三)
- nginx httpd apache对比
- nginx + httpd 负载均衡
- httpd + mod_jk + tomcat
- apache httpd+tomcat
- httpd+tomcat负载均衡
- HAProxy+httpd+tomcat(五)
- CentOS httpd + tomcat [ajp]
- apache httpd 整合tomcat
- 三、Nginx+Tomcat+Redis实现Session共享
- setup httpd md_jk with tomcat
- Integration Tomcat into Apache Httpd
- Apache Vs Httpd Vs Tomcat
- Integration Tomcat into Apache Httpd
- apache httpd 2.2 + tomcat 配置
- Apache httpd与tomcat集群
- CentOS下 httpd+tomcat 整合
- httpd配置文件详解(三)
- AFNetworking3.0 如何取消单个网络请求
- 在ubuntu上面配置nginx实现反向代理和负载均衡
- Web前端框架与类库的思考
- 权限管理——RBAC模型总结 .
- WebSocket协议详解
- nginx+httpd+tomcat(三)
- 利用SecureCRT上传、下载文件(使用sz与rz命令)
- C中各种类型的最大值最小值常量
- hdu acm 1198 Farm Irrigation
- 深入理解Java 虚拟机(周志明)笔记(五)——垃圾收集器(一)
- JAVAABC-java中的常见小问题
- Fragment回调了onResume方法却并没有进去前台可见
- JavaScript学习笔记——引用类型:Object类型、function类型
- iOS学习 UITableView 单选