Tomcat与Nginx、Apache结合的相关实践

一、LNMT

  简介:在Tomcat服务器前端部署一个Nginx(反向代理),当用户请求静态资源时,由Nginx服务器负责响应;当用户请求java应用程序资源时,由后端的Tomcat服务器进行响应。

  环境:

    OS:Linux CentOS 6.8

    Tomcat 6.0, IpAddr:192.168.1.101

    Nginx 1.10.2, IpAddr:192.168.1.102

  配置:

    Tomcat端配置:  

/*定义一个主机*/
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    /*定义一个Context:testapp应用程序*/ <Context path="/test" docBase="testapp" reloadable="true" />
/*定义第二个应用程序:test-1app*/ <Context path="/test-1" docBase="test-1app" reloadable="true" /> </Host>

    Nginx端配置:

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    /*处理静态资源请求*/
    location / {
    }

    /*Tomcat处理URL以jsp和do结尾的请求*/
    location ~*\.(jsp|do)$ {
        proxy_pass http://192.168.1.101:8080;
    }

    /*Tomcat处理testapp应用请求*/
    location /test/ {
        proxy_pass http://192.168.1.101:8080/test/index1.jsp;
    }

    /*Tomcat处理test-1app应用请求*/
    location /test-1/demo.jsp {
        proxy_pass http://192.168.1.101:8080;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

二、LAMT

  简介:与LNMT类似,只不过是httpd作为反代服务器。但httpd反代tomcat有三种方式:

    ①基于httpd的proxy_moduleproxy_http_module的反代

    ②基于httpd的proxy_moduleproxy_ajp_module的反代

    ③基于httpd的mod_jk模块的反代(需自行编译安装) 

  环境:

    OS:Linux CentOS 6.8

    Tomcat 6.0, IpAddr:192.168.1.101

    httpd 2.2.15, IpAddr:192.168.1.102

  配置:

    第一种方式的实现:

    Tomcat端配置与Nginx时配置相同,无需修改。

    Httpd端配置:

NameVirtualHost 192.168.1.102:80

<VirtualHost 192.168.1.102:80>
  ServerName www.b.com
  ProxyRequests Off
  ProxyVia On
  ProxyPreserveHost On
  ProxyPass / http://192.168.1.101:8080
  ProxyPassReverse / http://192.168.1.101:8080
  <Location />
    Allow from all
  </Location>
</VirtualHost>

<VirtualHost 192.168.1.102:80>
  ServerName www.c.com
  ProxyRequests Off
  ProxyVia On
  ProxyPreserveHost On
  ProxyPass / http://192.168.1.101:8080/test/index1.jsp
  ProxyPassReverse / http://192.168.1.101:8080/test/index1.jsp
  <Location />
    Allow from all
  </Location>
</VirtualHost>

<VirtualHost 192.168.1.102:80>
  ServerName www.d.com
  ProxyRequests Off
  ProxyVia On
  ProxyPreserveHost On
  ProxyPass / http://192.168.1.101:8080/test-1/demo.jsp
  ProxyPassReverse / http://192.168.1.101:8080/test-1/demo.jsp
  <Location />
    Allow from all
  </Location>
</VirtualHost>

    如果是httpd2.4+版本,配置如下:

<VirtualHost 192.168.1.102:80>
  ServerName www.b.com
  ProxyRequests Off
  ProxyVia On
  ProxyPreserveHost On
  <Proxy *>
     Require all granted         
  </Proxy>
  ProxyPass / http://192.168.1.101:8080
  ProxyPassReverse / http://192.168.1.101:8080
  <Location />
    Require all granted
  </Location>
</VirtualHost>

    第二种方式实现:

    Tomcat端无需变动

    Httpd端仅需修改协议和端口即可,配置如下:

NameVirtualHost 192.168.1.102:80

<VirtualHost 192.168.1.102:80>
  ServerName www.b.com
  ProxyRequests Off
  ProxyVia On
  ProxyPreserveHost On
  ProxyPass / ajp://192.168.1.101:8009
  ProxyPassReverse / ajp://192.168.1.101:8009
  <Location />
    Allow from all
  </Location>
</VirtualHost>

<VirtualHost 192.168.1.102:80>
  ServerName www.c.com
  ProxyRequests Off
  ProxyVia On
  ProxyPreserveHost On
  ProxyPass / ajp://192.168.1.101:8009/test/index1.jsp
  ProxyPassReverse / ajp://192.168.1.101:8009/test/index1.jsp
  <Location />
    Allow from all
  </Location>
</VirtualHost>

    第三种方式实现:

    请求流程:Client-->http-->httpd-->mod_jk(ajp)-->tomcat(http connector)

    首先安装mod_jk模块:tomcat-connectors-1.2.42-src.tar.gz(依赖httpd-devel)

    展开归档后进入native目录,执行

    # ./configure --with-apxs=/usr/sbin/apxs

    # make && make install

    安装完成,开始配置,

    Tomcat端主机只需要在之前的基础上需改一个地方:

    在Engine中加入jvmRoute属性即可。

    Httpd端的配置,需要两个配置文件:

      ①/etc/httpd/conf.d/workers.propeties

worker.list=srv_A,StatA
worker.srv_A.host=192.168.1.101
worker.srv_A.port=8009
worker.Tomcat.type=ajp13
worker.StatA.type=status

      ②/etc/httpd/conf.d/mod_jk.conf

/*装载jk_module 路径是相对于/etc/httpd/下*/
LoadModule jk_module modules/mod_jk.so

JkWorkersFile /etc/httpd/conf.d/workers.properies
JkLogFile logs/mod_jk.log
JkLogLevel notice
JkMount /* srv_A       此处的"/"是以webapps为根
JkMount /jk_status StatA

 

    

posted on 2017-01-16 15:41  林纳克斯  阅读(1356)  评论(0编辑  收藏  举报

导航