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 &quot;%r&quot; %s %b" />
</Host>
<Host name="www.a2.com" appBase="webapps">
<Context path="" docBase="myapp" />
</Host>


    </Engine>

///编写httpd虚拟主机,http_proxy_http配置httpd的虚拟机

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 &quot;%r&quot; %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 &quot;%r&quot; %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,所以不知道访问的是后端哪台主机。。。

0 0