当前位置: 首页 > 科技观察

一篇文章看懂Tomcat、Nginx和Apache的区别

时间:2023-03-12 09:07:29 科技观察

这三个都是web服务器,各自有什么特点?它们之间有什么区别?nginx和tomcat在性能上有什么异同?不能用apache和nginx吗?标题中的Apache其实就是ApacheHTTPServerProject,它是和Nginx一样的开源HTTP服务器软件。HTTP服务器本质上是一个应用程序——它通常运行在服务器上,绑定服务器的IP地址并监听某个TCP端口,接收并处理HTTP请求,以便于客户端(Chrome等浏览器)获取资源如网页(HTML格式)、文档(PDF格式)等通过HTTP协议在服务器上传输。强大的Java类库还实现了一个简单的HTTP服务器供开发者使用:HttpServer(JavaHTTPServer)使用这个类库可以很方便的运行一个HTTP服务器,并且可以提供HTTP服务。与ApacheHTTPServer相比,Tomcat可以动态生成资源返回给Client。ApacheHTTPServer和Nginx都可以通过HTTP协议向客户端返回一个文本文件的内容,但是文本文件的内容是固定的——无论何时何人访问,内容都是完全一样的,即静态资源。动态资源在不同的时间获得不同的内容并被客户端访问。ApacheHTTPServer和Nginx本身不支持生成动态页面,但可以通过其他模块支持(例如通过Shell、PHP和Py脚本动态生成内容)。如果要用Java程序动态生成资源内容,很难使用这种HTTP服务器。JavaServlet和JSP允许Java程序处理HTTP请求并返回内容(由程序动态控制)。Tomcat是支持运行Servlet/JSP应用的容器(Container):Tomcat运行在JVM上,和HTTP服务器一样,绑定IP地址和监听TCP端口,以及:管理Servlet程序的生命周期映射URL指向指定的Servlet进行处理配合Servlet程序处理HTTP请求根据HTTP请求生成一个HttpServletRequest对象传递给Servlet进行处理,并将Servlet在浏览器中的HttpServletResponse对象生成的内容返回给浏览器。Tomcat虽然也可以认为是一个HTTP服务器,但通常还是和Nginx配合:动静资源分离使用Nginx的反向代理分发请求:所有动态资源请求都交给Tomcat,静态资源(比如图片)的请求,CSS,JS文件等)由Nginx直接返回给浏览器进行负载均衡。当业务压力增大时,一个Tomcat实例可能无法应对。可以启动多个Tomcat实例进行横向扩展。Nginx负责负载均衡,将请求分发到不同的实例进行处理转载本文请联系JavaEdge公众号。