友情提示: 动静分离需要在负载均衡的环境基础上搭建,负载均衡可以参考
介绍
就是将网站静态资源(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