首页 > 代码库 > nginx三 之动静分离

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; } } }

 

 

重新加载配置文件


 

/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三 之动静分离