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