nginx
  Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广。主要功能为反向代理、负载均衡和动静分离。
1. 代理服务器
1.1 什么是代理服务器
  代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。
1.2 为什么要使用代理服务器
  1)提高访问速度
  由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。
  2)防火墙作用
  由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。
  3)通过代理服务器访问不能访问的目标站点
  互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙就是利用了代理服务器。
2. 正向代理与反向代理
2.1 正向代理
  正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
2.2 反向代理
  反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
2.3 反向代理的应用
  现在许多大型web网站都用到反向代理。除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。
2.3 负载均衡
  负载均衡:多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。
Nginx可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)
3. Nginx反向代理

  配置文件如下:

  upstream myapp{
    server 127.0.0.1:8080;
  }
  server {
    listen 80;
    server_name localhost; #自己的域名或ip
    location / {
      proxy_pass http://myapp;
      # 或者 proxy_pass http://127.0.0.1:8080
    }
  }

  其他可选参数:

  proxy_redirect off;      # 是否跳转
  proxy_set_header Host $host; # 请求要转发的host
  proxy_set_header X-Real-IP $remote_addr;# 请求的远程地址
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  proxy_max_temp_file_size 0;  #
  proxy_connect_timeout 90;   # 连接前面的服务器超时时间
  proxy_send_timeout 90;     # 请求转发数据报文的超时时间
  proxy_read_timeout 90;     # 读取超时时间
  proxy_buffer_size 4k;      # 缓冲区的大小
  proxy_buffers 4 32k;       #
  proxy_busy_buffers_size 64k;   # #proxy_buffers缓冲区,网页平均在32k以下的
  proxy_temp_file_write_size 64k;  # 高负荷下缓冲大小(proxy_buffers*2)
4. Nginx负载均衡

  配置文件如下:

  upstream myapp {

    ip_hash;

    server localhost:18080;
    server localhost:18081;
    server localhost:18082;
  }
  server {
    listen 8000;
    location / {
      proxy_pass http://myapp;
    }
  }
4.1 轮询
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除(默认)
4.2 weight

  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。平均3次访问,1次分配给server,2次分给server2。

  upstream myapp {
  server server1 weight=1;
  server server2 weight=2;
}
4.3 ip_hash

  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream myapp {
  ip_hash;
  server server1;
  server server2;
}
4.4 fair(第三方)

  按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream myapp {
  server server1;
  server server2;
  fair;
}
4.5 url_hash(第三方)
  按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

  例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

upstream myapp {
  server server1;
  server server2;
  hash $request_uri;
  hash_method crc32;
} 

4.6 tips

upstream bakend{
  ip_hash;  
  server 127.0.0.1:9090 down;  
  server 127.0.0.1:8080 weight=2;  
  server 127.0.0.1:6060 fail_timeout=2s max_fails=2;  
  server 127.0.0.1:7070 backup;  
}
  每个设备的状态设置为:
  1.down 表示单前的server暂时不参与负载;
  2.weight 默认为1.weight越大,负载的权重就越大;
  3.max_fails :允许请求失败的次数默认为2.当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
  4.fail_timeout:max_fails次失败后,暂停的时间;
  5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最小。

Linux Nginx

到现在有0条评论

添加我的评论