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实现动静分离的主要内容,如果未能解决你的问题,请参考以下文章

图文详解 配置Nginx+Tomcat负载均衡动静分离集群

15.Nginx动静分离Rewrite

Nginx+Tomcat负载均衡及动静分离

Nginx+Tomcat实现动静分离和负载均衡

Nginx 动静分离概述

Nginx 动静分离概述