nginx三 之动静分离

Posted 哎哟~不错哦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx三 之动静分离相关的知识,希望对你有一定的参考价值。

 

友情提示: 动静分离需要在负载均衡的环境基础上搭建,负载均衡可以参考http://www.cnblogs.com/dahuandan/p/6753646.html

 

介绍

 就是将网站静态资源(HTML,,CSS,img等文件)与后台应用分开部署,提高网站响应速度,降低对后台应用服务器的请求。

 

配置

 

添加、代理静态资源集群


#进入nginx安装的conf目录
cd /usr/local/nginx/conf/
#打开nginx.conf文件添加以下内容:
upstream dynamic_server { 
    server 10.93.143.130:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 10.93.138.207:8080 weight=1 max_fails=2 fail_timeout=30s; 
} 


upstream static_server { 
    server 127.0.0.1:808 weight=1;
}
    

location ~ .*\\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ 
    proxy_pass http://static_server; 
    expires 30d;
} 

location ~ .*$ {

    proxy_pass http://dynamic_server; 
}

server{
    listen 808;
    server_name static;
        location /
        { 
            expires 30d;
        } 
    }

 

 

完整的配置文件


#工作进程个数:多开几个可以减少io带来的影响,
#根据 lscpu查出来的cpus设置(一般为当前机器核心数的1-2倍,最大不超过8),
worker_processes 2; 

#worker_cpu_affinity需要结合worker_processes使用,一个worker_processes绑定一个CPU,
#比如两核是01,四核是0001,下面是8核绑定8个worker_processes的示例
worker_cpu_affinity 01 10;

#error_log logs/error.log info;

events {
    #使用epoll模型提高性能
    use epoll;

    #单个进程连接数(最大连接数=连接数*进程数)
    worker_connections 65535;
}


http {

    #文件扩展名与文件类型映射表 
    include mime.types;

    #默认文件类型 
    default_type application/octet-stream;

    
    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
    #注意:如果图片显示不正常把这个改成off
    sendfile on;


    #长连接超时时间,单位是秒 
    keepalive_timeout 65;

    #gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
    gzip on;
    gzip_min_length 1k; #最小1K
    gzip_buffers 16 64K;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain application/x- text/css application/xml application/;
    gzip_vary on;


    #header设置:用户真实的ip地址转发给后端服务器
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;


    #缓冲
    client_body_buffer_size 512k;
    proxy_connect_timeout 5;
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;


    
    ################################################集群 ###################################################    

    #动态资源集群
    upstream dynamic_server { 

        #服务器配置 weight是权重的意思,权重越大,分配的概率越大。 
        server 192.168.1.111:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.111:8081 weight=1 max_fails=2 fail_timeout=30s; 
    } 


    #静态资源集群(一般由nginx管理,因为nginx处理静态资源性能好,如果服
    #务器有限,也可以部署在代理服务器本地)
    upstream static_server { 
        server 127.0.0.1:808 weight=1;
    }



    ################################################Nginx代理###################################################    
    server {

        #监听80端口,可以改成其他端口 
        listen 80;

        #nginx服务的域名,通过域名就可以访问应用
        server_name localhost;

        ##静态资源存放在nginx服务器的地址
        #root /opt/static/transfer;


        #反向代理:网页、视频、图片文件从nginx服务器读取
        location ~ .*\\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        { 

            #反向代理,静态的由nginx来处理(不配置默认nginx的html目录,静态资源的目录结构必须和tomcat的web工程一致)
            proxy_pass http://static_server; 

            #浏览器中缓存30天
            expires 30d;
        } 


        #反向代理: 其他动态文件转发到后端的tomcat集群
        location ~ .*$ 
        {
            proxy_pass http://dynamic_server; 
        }


        #错误提示页面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html 
        {
            root html;
        }

    }


    #静态资源服务器,这里监听本地808端口,因为静态资源服务器和代理服务器是同一台机器,所以有如下配置
    #如果是独立的服务器,直接在集群upstram配置即可。
    server{

        listen 808;

        server_name static;

        #反向代理:网页、视频、图片文件从nginx服务器读取
        location /
        { 
            #浏览器中缓存30天
            expires 30d;
        } 
    }
}
View Code

 

 

重新加载配置文件


/usr/local/nginx/sbin/nginx -s reload

 

 

测试

 

添加测试页面


 1、复制tomcat中的demo项目到/usr/local/nginx/html目录下

 2、创建index.html测试页面,分别放在tomcat1、tomcat2的demo项目,内容如下:

<!DOCTYPE HTML><html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcom Tomcat</title>
</head>
<body>
<h3>Welcom Tomcat</H3>
</body></html>

 

 3、修改index.html中的title和h3标签为Nginx,以便测试区分。

 

测试结果


 访问测试页面, 我们可以看到html静态资源的请求被分发在配置的nginx服务器,而不是tomcat

以上是关于nginx三 之动静分离的主要内容,如果未能解决你的问题,请参考以下文章

Nginx动静分离《三》

Nginx之动静分离

Nginx的应用之动静分离

5.3 Nginx 动静分离

Nginx之http服务器(动静分离)+ rewrite

Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第三部分