default

负载均衡 & 动静分离

负载均衡主要思想就是把负载均匀合理地分发到多个服务器上,实现压力分流的目的。

主要配置如下:

nginx
http {
  upstream blogServer {
  	# ip_hash;  # ip_hash 方式
    # fair;   # fair 方式
    server 127.0.0.1:8081;  # 负载均衡目的服务地址
    server 127.0.0.1:8080;
    server 127.0.0.1:8082 weight=10;  # weight 方式,不写默认为 1
  }
 
  server {
    location / {
    	proxy_pass http://blogServer;
      proxy_connect_timeout 10;
    }
  }
}

Nginx 提供了好几种分配方式,默认为轮询,就是轮流来。有以下几种分配方式:

  1. 轮询,默认方式,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务挂了,能自动剔除;
  2. weight,权重分配,指定轮询几率,权重越高,在被访问的概率越大,用于后端服务器性能不均的情况;
  3. ip_hash,每个请求按访问 IP 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决动态网页 session 共享问题。负载均衡每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的;
  4. fair(第三方),按后端服务器的响应时间分配,响应时间短的优先分配,依赖第三方插件 nginx-upstream-fair,需要先安装;

查看每次请求被分发的端口

可以在nginx的http中配置log_format在结尾处加上$upstream_addr,他表示当前转发到的后端服务器的 IP 地址和端口

nginx
http {
    log_format  blogLog  '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"'
        'upstream: $upstream_addr';
    server{
        # ...
        access_log  /www/wwwlogs/xxx.log blogLog;
        # ...
    }
}
 

动静分离

动静分离就是把动态和静态的请求分开。方式主要有两种:

一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。

另外一种方法就是动态跟静态文件混合在一起发布, 通过 Nginx 配置来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。