Tomcat+Nginx实现动静分离
Posted 孙天飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat+Nginx实现动静分离相关的知识,希望对你有一定的参考价值。
前言
1. 什么是网站动静分离架构模式?
- 网站中的动静分离其实就是将动态资源和静态资源分离处理。
- 传统网站架构模式:jsp、html、img、css、js全部存放在一个服务器上,把静态资源和动态资源共同放到一台服务器上。
- 大型互联网公司中前端与后端开发是分离,静态资源和动态资源不会部署到同一台服务器上,静态资源部署在一个服务器上(html、css、img、js …),动态资源部署在一个服务器上(后端代码)
2. 动态资源和静态资源的区别?
- 静态资源:用户多次访问后,html源代码不会发生改变,例如html、jpg 、css、js 等不需要后台处理的资源。
- 动态资源:用户多次访问后,html源代码可能会发生改变,例如我们访问的JSP页面 (本质是一个Servlet)或*.do请求等。
- 区别:判断标准是,刷新多次,html源代码是否发生改变 。
- 误区:并不是页面是动态的,就一定是动态页面,一般动态页面为了提高被搜索引擎搜到的机率,会使用伪静态;也就是说使用动态页面静态化技术将页面静态化,静态化技术有Freemarker、Beetl、Velociity、Thymeleaf 等。
3. 为什么要使用动静分离?
- 其实就是减轻服务器的压力、提高服务器的响应速度和效率、保证高并发。就像数据库的读写分离一样,也是保证高并发。
- 静态服务器我们同时也可以使用CDN做内容分发,访问不同的资源转发到不同的服务器。
- 静态服务器我们一般使用nginx,Nginx实现静态服务器要比Tomcat 快得多。
4. 动静分离与前后端分离的区别?
- 动静分离:指的是动态资源和静态资源分离,分别部署在不同的服务器上。
- 前后端分离:网站架构模式中,微服务开发基于SOA面向服务开发,后台和前端都采用调用接口方式。
一、tomcat与nginx的区别
从应用方面 tomcat一般是做\'动态解析\'才会用得到,支持jsp(Java Server Pages包括html和java,可以写java代码也可以写html和js代码,就像.asp页面一样可以写c#和html还有js)的解析,需要配置JDK支持 nginx,则一般是做\'静态\'(html和js),本身不具备动态解析功能,需要配置其他插件或通过其他软件协同才具备动态功能,比如php,tomcat,或者proxypass到win2008的iis服务器做ASP的动态链接等, 但nginx在静态上的功能非常强大,也可做访问控制,而且可以做成各种协议负载服务器,包括流媒体的也可以做,具体得去官方网站去看; 在性能方面 如果再不做系统调优的情况下 \'tomcat一般支持并发(并发是一秒钟的访问量)并不高100个差不多了\' \'nginx在静态方面支持并发轻松达几万\' 如果这是个面试的人给你出的这道题目上你回答,你可以简单的告诉他,两者应用领域不一样,tomcat是做java语言的动态解析,而nginx则是一款功能强大的负载软件,配合各种插件可以实现
二、动态和静态的区别
静态请求:不需要访问数据库
动态请求:需要访问数据库,登录
静态页:打开一个网页,不需要访问数据库
动态页:打开一个网页,需要访问数据库
企业中无论是静态资源还是动态资源,都需要做共享存储
三、配置Java环境
Tomcat处理Java代码,是Java的容器,可以直接解析Java代码(.jsp结尾),不需要代理
resin处理Java代码,是Java的容器,可以直接解析Java代码,不需要代理
[root@server1 ~]# tar zxf jdk-8u91-linux-x64.tar.gz [root@server1 ~]# mv jdk jdk1.8.0_91/ jdk-8u91-linux-x64.tar.gz [root@server1 ~]# mv jdk1.8.0_91/ /usr/local/java [root@server1 ~]# cd /etc/profile.d/ [root@server1 profile.d]# vi java.sh export JAVA_HOME=/usr/local/java #设置Java根目录 export PATH=$PATH:$JAVA_HOME/bin #在PATH环境变量中添加JAVA根目录下的斌>子目录 ~ [root@server1 profile.d]# java -version#查看Java版本 openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
四、安装并启动tomcat
[root@server1 profile.d]# tar zxf apache-tomcat-8.5.16.tar.gz [root@server1 profile.d]# mv apache-tomcat-8.5.16 /usr/local/tomcat8 [root@server1 profile.d]# /usr/local/tomcat8/bin/startup.sh #启动 Using CATALINA_BASE: /usr/local/tomcat8 Using CATALINA_HOME: /usr/local/tomcat8 Using CATALINA_TMPDIR: /usr/local/tomcat8/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar Tomcat started. [root@server1 profile.d]# /usr/local/tomcat8/bin/shutdown.sh #关闭tomcat Using CATALINA_BASE: /usr/local/tomcat8 Using CATALINA_HOME: /usr/local/tomcat8 Using CATALINA_TMPDIR: /usr/local/tomcat8/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar [root@server1 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup [root@server1 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown [root@server1 ~]# tomcatup Using CATALINA_BASE: /usr/local/tomcat8 Using CATALINA_HOME: /usr/local/tomcat8 Using CATALINA_TMPDIR: /usr/local/tomcat8/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar Tomcat started. [root@server1 ~]# netstat -anpt | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16829/java systemctl stop firewalld setenforce 0
mkdir -p /web/webapp2
vi /web/webapp2/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title></head>
<body><% out.println("welcome to test site");%>
<div>动态页面</div>
<img src="b.jpg" />
</body>
</html>
#这个jsp中引入的page标签
#language表示语言是Java
#import类似于Java类中的import就是把包导入进来,这样在jsp才可以调用包中的类
#pageEncoding表示页面的编码格式
tomcatdown
vi /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp2" path="" reloadable="false"></Context> #添加
tomcatup
netstat -anpt | grep 8080
第二台pc与其做相同的配置
五、pc3上安装启动nginx
1 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ 2 tar zxf nginx-1.6.0.tar.gz -C /opt 3 cd /opt/nginx-1.6.0/ 4 ./configure \\ 5 --prefix=/usr/local/nginx \\ 6 --user=nginx \\ 7 --group=nginx \\ 8 --with-file-aio \\ #同时提交多个io请求给内核 9 --with-http_stub_status_module \\ #状态统计 10 --with-http_gzip_static_module \\ 11 --with-http_flv_module \\ #支持对FLV(flash)文件的拖动播放 12 --with-http_ssl_module #支持安全证书 13 14 make && make install 15 16 useradd -M -s /sbin/nologin nginx 17 vim /usr/local/nginx/conf/nginx.conf 18 upstream tomcat_server { 19 server 20.0.0.10:8080 weight=1; 20 server 20.0.0.20:8080 weight=1; 21 } #添加 22 server { 23 listen 80; 24 server_name localhost; 25 26 #charset koi8-r; 27 28 #access_log logs/host.access.log main; 29 30 location / { 31 root html; 32 index index.html index.htm; 33 } 34 location ~ \\.jsp$ { #添加 35 proxy_pass http://tomcat_server; 36 }37 nginx -t 38 killall -3 nginx 39 nginx 40 netstat -anpt | grep nginx
测试
、
以上是关于Tomcat+Nginx实现动静分离的主要内容,如果未能解决你的问题,请参考以下文章