HTTP/NGINX+TOMCAT实现动静分离
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP/NGINX+TOMCAT实现动静分离相关的知识,希望对你有一定的参考价值。
什么是TOMCAT?
Tomcat和其他web服务器一样,可以响应html的请求,实际上Tomcat是Apache的服务器的扩展,但是运行时他是独立运行的。另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式,但是它的静态页面处理能力比较差。可以使用动静分离来提高站点性能。
JAVA
Java的技术体系有三个分类:java2SE,java2EE,jave2ME(移动开发)。jdk其实相当于java2SE。java2EE相当于是在jdk中添加了一些企业级类库,像jsp,servlet,javamail...。servlet是为java开发提供便捷的构建web server接口,能够在前端为我们所写的web应用程序提供支持http protocol的解析功能。能接受客户端请求,把请求转换成本地某个代码的执行,并把代码执行的结果通过响应报文的方式响应给客户端。Tomcat就是java2EE规范的不完整实现,为啥叫不完整呢?因为Tomcat只是实现了一部分重要常用的类库,不是所有的类库。
JSP处理流程
程序员写的Jsp代码通过jasper这个中间引擎转换成纯java代码,java代码需要先编译成字节码才能运行,通过javac compiler编译成class类文件。类文件是servlet格式,需要调用servlet类库到JVM中,class文件才能在JVM中运行。运行java代码依赖很多类库,运行前必须要加载到jvm中。所以要构建一个jsp网站,需要jdk+servlet类库,jsp类库。Tomcat就是企业中常用来实现
具体流程:
.jsp----->jasper(属于jsp类库)----->.java----->java compiler(属于servlet类库)----->.class----->jvm(Java虚拟机)
Tomcat的安装
]#yum install -y java-1.8.0-openjdk-devel <===前提 ]#java -version <===查看环境准备 openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode) ]#yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps tomcat-lib <===后面不是必须装,建议装上
冷部署应用测试
]#mkdir -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF} ]#cd /usr/share/tomcat/webapps/test ]#vim index.jsp <===测试页面 <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world"); %> </body> </html> ]#systemctl start tomcat
测试
在实际应用中,Tomcat是不直接接受前端客户端的请求,前端会有调度器来调度jsp请求至tomcat server。下面我们来简单实现tomcat的调度。
第一种:通过http反向代理至tomcat(http和tomcat在同一台主机上),使用proxy_http_module。
]#yum install httpd -y ]#cd /etc/httpd/conf.d ]#vim http-tomcat.conf <VirtualHost *:80> servername www.a.com documentroot /usr/share/tomcat/webapps/ROOT proxyrequests off <===关闭正向代理 proxyvia on <===响应报文中添加via首部 proxypreservehost on <proxy *> require all granted <===包括下面,这两个授权仅在centos7以上版本中使用。之前的版本不需要 </proxy> proxypass / http://127.0.0.1:8080/ <===默认tomcat是在8080端口 proxypassreverse / http:127.0.0.1:8080/ <location /> require all granted </location> </virtualhost>
第二种:通过http的proxy_ajp_module反向代理至tomcat
]#vim ajp-tomcat.conf <VirtualHost *:80> servername www.a.com documentroot /usr/share/tomcat/webapps/ROOT proxyrequests off proxyvia on proxypreservehost on <proxy *> require all granted </proxy> proxypass / ajp://127.0.0.1:8009/ <===ajp默认通过8009监听 proxypassreverse / ajp:127.0.0.1:8009/ <location /> require all granted </location> </virtualhost>
第三种:通过nginx反向代理
]#vim nginx.conf server { root /usr/share/tomcat/webapps/ROOT; index index.jsp index.html location ~* \.(jsp|do)$ { proxy_pass } ...... }
上面三种方法可以根据自己需求和生产环境选择,除了nginx和http有处理能力差距之外,其余并没有差别。这样通过上面的代理后,动态jsp文件转发到tomcat处理,静态文件代理自己处理,这样可以实现动静分离,当然还可以分的再细一点,这里就不再赘述了。
本文出自 “沉默是金” 博客,请务必保留此出处http://maguofu.blog.51cto.com/12431016/1980176
以上是关于HTTP/NGINX+TOMCAT实现动静分离的主要内容,如果未能解决你的问题,请参考以下文章