有些人总是不带我喝咖啡,认为喝咖啡高雅,吃大蒜低俗,还好,没有俗就没有雅。。。我就俗了,怎么地,打我呀。。。。哈哈
动静分离,那么什么动态的,什么是静态的呢?
访问网页的时候,我们总会创造浏览器会加载各种各样的文件,有html文件,有css样式表,有js脚本,还有图片,还有流媒体等各种文件,这些实在便是静态的文件,放在做事器上,无须动态天生的文件那么便是静态文件。那么什么是动态文件呢?例如java写的jsp文件,须要通过编译器进行编译成字节码文件,然后在java虚拟机上运行,运行之后,返回给客户端一个相应,有的时候,还须要到数据库中取出数据,那么这种须要经由编译的文件就称之为动态文件。
动态文件的处理比静态文件的处理速率要慢N倍,慢在啥地方呢?首先,动态文件须要编译,耗费韶光,动态文件要去连接数据库,耗费韶光,动态文件须要组织成http相应,耗费韶光,根据java的流程,那么便是根据url,找到jsp文件,将jsp文件转换成servlet文件,然后形成类文件,然后在jvm上运行,jvm可能还要加载额外的类文件,然后组成成相应返回给servlet,然后再返回给客户端。
在利用动静分离的时候,一样平常利用的模型如下所示:
在利用动静分离的时候,须要将一些静态的文件和动态的文件分离开来,从而利用nginx来处理静态要求,而利用tomcat来处理动态的要求,从而会大大的提高处理速率,为啥?
nginx和httpd是专门用来处理静态文件的,效率极高,并且由nginx直接相应,减少了向后端转发的过程;将动态内容和静态内容进行分离,可以提高资源利用率,nginx的性能得到发挥,也让tomcat不会那么繁忙,动态做事器机器耗费性能,例如在java中的各种方法区工具的回收,堆内存的回收等。
构建动静分离的环境
要想构建动静分离的环境,那么就须要安装nginx,安装jdk,然后安装tomcat,详细的步骤如下:
编译安装nginx:
[root@mogilenode2 nginx-1.10.1]# ./configure –prefix=/usr/local/nginx –with-http_ssl_module –with-http_stub_status_module –with-pcre
[root@mogilenode2 nginx-1.10.1]# make && make install
[root@mogilenode2 ~]# /usr/local/nginx/sbin/nginx (启动nginx)
[root@mogilenode2 ~]# netstat -tnlp|grep nginx(查看监听端口,并且利用浏览器访问测试)
tcp 0 0 0.0.0.0:80 0.0.0.0: LISTEN 13933/nginx
安装jdk:
[root@mogilenode3 server]# rpm -ivh jdk-8u144-linux-x64.rpm
Preparing… ########################################### [100%]
1:jdk1.8.0_144 ########################################### [100%]
Unpacking JAR files…
tools.jar…
plugin.jar…
javaws.jar…
deploy.jar…
rt.jar…
jsse.jar…
charsets.jar…
localedata.jar…
配置java环境变量:
[root@mogilenode3 server]# echo “export JAVA_HOME=/usr/java/latest”>/etc/profile.d/java.sh
[root@mogilenode3 server]# echo “export PATH=$JAVA_HOME/bin:$PATH”>>/etc/profile.d/java.sh
[root@mogilenode3 server]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
测试jdk及环境变量是否成功:
安装tomcat:
[root@mogilenode3 server]# tar -xf apache-tomcat-8.5.20.tar.gz -C /usr/local/
l[root@mogilenode3 server]# ln -sv /usr/local/apache-tomcat-8.5.20/ /usr/local/tomcat
`/usr/local/tomcat’ -> `/usr/local/apache-tomcat-8.5.20/’
配置tomcat环境变量:
[root@mogilenode3 local]# vim /etc/profile.d/tomcat.sh
[root@mogilenode3 local]# cat !$
cat /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
测试tomcat是否安装成功:
[root@mogilenode3 ~]# netstat -tnlp|grep java(把稳浏览器访问的时候,添加端口号来进行访问)
tcp 0 0 :::8080 ::: LISTEN 1125/java
tcp 0 0 ::ffff:127.0.0.1:8005 ::: LISTEN 1125/java
tcp 0 0 :::8009 ::: LISTEN 1125/java
创建动态文件
根据java的目录层次构造,写一个基本的页面,如下:
[root@mogilenode3 webapps]# mkdir kel
[root@mogilenode3 webapps]# cd kel
[root@mogilenode3 kel]# ls -l
total 0
[root@mogilenode3 kel]# mkdir {META-INF,WEB-INF,classes,lib}
[root@mogilenode3 kel]# vim index.jsp
[root@mogilenode3 kel]# cat index.jsp
<%@ page language=”java” %>
<%@ page import=”java.util.” %>
<html>
<head>
<title>JAVA PAGE</title>
</head>
<body>
<% out.println(“Hello,World”); %>
</body>
</html>
[root@mogilenode3 kel]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 20 14:46 classes
-rw-r–r– 1 root root 201 Sep 20 14:46 index.jsp
drwxr-xr-x 2 root root 4096 Sep 20 14:46 lib
drwxr-xr-x 2 root root 4096 Sep 20 14:46 META-INF
drwxr-xr-x 2 root root 4096 Sep 20 14:46 WEB-INF
修正tomcat的配置文件server.xml(添加一个虚拟主机,主机名为www.kel.com,,默认路径为webapps下面的kel目录):
<Host name=”www.kel.com” appBase=”webapps” unpackWARS=”true” autoDeploy=”true”>
<Context path=”” docBase=”kel” reloadable=”true” />
</Host>
测试访问:
[root@mogilenode3 conf]# grep “www.kel.com” /etc/hosts (设置主机名解析)
192.168.1.238 www.kel.com
[root@mogilenode3 conf]# curl http://www.kel.com:8080 (利用curl进行访问)
<html>
<head>
<title>JAVA PAGE</title>
</head>
<body>
Hello,World
</body>
</html>
配置nginx
配置主机名解析:
[root@mogilenode2 nginx]# grep “www.kel.com” /etc/hosts
192.168.1.237 www.kel.com
[root@mogilenode2 conf]# ls -l nginx.conf(修正nginx配置文件,将动态要求也便是文件后缀为jsp或者do的要求转发到tomcat上,由于是虚拟主机,以是url中必须写上主机名,静态页面在nginx上处理,静态页面在html路经下)
-rw-r–r– 1 root root 2727 Sep 20 15:09 nginx.conf
server_name www.kel.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~ \.(jsp|do)$ {
proxy_pass http://www.kel.com:8080;
}
上传静态文件到nginx的html目录中,用来测试静态文件的访问:
[root@mogilenode2 nginx]# ls -l html/1.jpg
-rw-r–r– 1 root root 25854 Sep 20 15:13 html/1.jpg
访问nginx做事器测试静态文件访问:
访问nginx做事器,测试动态页面访问:
总结
总体上来说,动静分离还是比较大略的,紧张让前真个代理做事器直接相应静态要求,让前真个代理做事器转发动态要求到后真个tomcat做事器即可。
把稳上面的是实验环境,对付tomcat的运行的用户是直接的root用户,在生产中,必须修正为其他不能登录的用户,例如tomcat用户。