zoukankan      html  css  js  c++  java
  • 动静分离,提高网页访问速度

    起源

        有些人总是不带我喝咖啡,认为喝咖啡高雅,吃大蒜低俗,还好,没有俗就没有雅。。。我就俗了,怎么地,打我呀。。。。哈哈

        动静分离,那么什么动态的,什么是静态的呢?

        访问网页的时候,我们总会发现浏览器会加载各种各样的文件,有html文件,有css样式表,有js脚本,还有图片,还有流媒体等各种文件,这些其实就是静态的文件,放在服务器上,无须动态生成的文件那么就是静态文件。那么什么是动态文件呢?例如java写的jsp文件,需要通过编译器进行编译成字节码文件,然后在java虚拟机上运行,运行之后,返回给客户端一个响应,有的时候,还需要到数据库中取出数据,那么这种需要经过编译的文件就称之为动态文件

        动态文件的处理比静态文件的处理速度要慢N倍,慢在啥地方呢?首先,动态文件需要编译,耗费时间,动态文件要去连接数据库,耗费时间,动态文件需要组织成http响应,耗费时间,根据java的流程,那么就是根据url,找到jsp文件,将jsp文件转换成servlet文件,然后形成类文件,然后在jvm上运行,jvm可能还要加载额外的类文件,然后组成成响应返回给servlet,然后再返回给客户端。

        在使用动静分离的时候,一般使用的模型如下所示(微信公众号:运维Linux和python):

        在使用动静分离的时候,需要将一些静态的文件和动态的文件分离开来,从而使用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用户。

        微信公众号:运维Linux和python

  • 相关阅读:
    ASP.NET服务器控件开发(3)事件和回传数据的处理
    ASP.NET服务器控件开发(1)封装html
    .Net Remoting(基本操作) Part.2
    javascript方法和技巧大全_javascript教程
    .Net Remoting(分离服务程序实现) Part.3
    [转]我在面试.NET/C#程序员时会提出的问题
    ASP.NET服务器控件开发(2)继承WebControl类
    一点点对WebResource.axd的配置及使用[原创]
    .Net Remoting(远程方法回调) Part.4
    ASP.NET自定义控件复杂属性声明持久性浅析
  • 原文地址:https://www.cnblogs.com/kellyseeme/p/7565697.html
Copyright © 2011-2022 走看看