• Nginx系列之4:动静分离


    为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。用户请求的动态文件比如servlet,jsp则转发给Tomcat,Jboss服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。

    实现方式:

    • 1、(推荐)将静态文件存放在专门的服务器上,使用单独的域名
    • 2、将动态和静态文件放在一起,使用nginx区分

    以实现方式1为例
    前提:将静态文件存放在代理服务器中
    在ngnix中创建文件目录(如/usr/local/nginx/static),将所有静态文件发布到该目录中
    在nginx.conf http server 中配置动静分离

    server {
        location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
        {
            root /usr/local/nginx/static;
            # 客户端浏览器缓存30天
            expires 30d;
        }
    }


    在实际的后台服务器中发布的程序中,使用静态文件时,路径指向设置为静态文件服务器(这里是代理服务器)。

    完整配置

    server {
            listen       80;
            server_name  localhost;
     
            #charset koi8-r;
     
            #access_log  logs/host.access.log  main;
            
            location / {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_pass http://localhost:8082;
            # 真实的客户端IP
            proxy_set_header   X-Real-IP        $remote_addr; 
            # 请求头中Host信息
            proxy_set_header   Host             $host; 
            # 代理路由信息,此处取IP有安全隐患
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            # 真实的用户访问协议
            proxy_set_header   X-Forwarded-Proto $scheme;
            }
            
            #静态文件交给nginx处理
            location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|
            zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
            {
                root /static;
                expires 30d;
            }
            #静态文件交给nginx处理
            location ~ .*.(js|css)?$
            {
                root /static;
                expires 1h;
            }
     
            #error_page  404              /404.html;
     
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
     
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }

    页面中的图片是放在了和Nginx同级目录的static文件夹下面。
    动静分离的原理:Nginx配置中,通过location的配置,结合正则表达式,根据请求路径判断当前请求是否静态资源,如果是,则通过 root static; 配置直接读取/usr/local/nginx/static下面对应相对路径的资源。如果是jsp等动态资源,则转发到Tomcat服务器。
    注意,可以使用 root [绝对路径];, 不一定要将静态资源放在Nginx目录下。
    这里将静态资源的location放在前面优先匹配(同样是正则匹配的情况下)。
    在此基础上,也可以通过不同的正则对不同的静态资源类型配置不同的缓存期限,如创意等图片可能会变动,缓存期限设小一点,而js/css等静态资源基本不变,缓存期限可以设长一点。

  • 相关阅读:
    jQuery 教程
    单例设计模式getInstance()
    JS和JQuery总结
    Anchor 对象
    static关键字
    HTML、html
    HTML DOM
    HTML DOM 实例Document 对象
    水池进水与放水问题:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.........(多线程应用)
    迷你DVD管理器(Java版)
  • 原文地址:https://www.cnblogs.com/starcrm/p/12977482.html
Copyright © 2020-2023  润新知