重温战场 发表于 2017-12-23 15:40:56

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">  /*定义第二个应用程序:test-1app*/

  <Context path="/test-1" docBase="test-1app">  
</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_module和proxy_http_module的反代
  ②基于httpd的proxy_module和proxy_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.  
JkLogLevel notice
  
JkMount
/* srv_A       此处的"/"是以webapps为根  
JkMount /jk_status StatA
  
页: [1]
查看完整版本: Tomcat与Nginx、Apache结合的相关实践