码迷,mamicode.com
首页 > Web开发 > 详细

Nginx HTTP 负载均衡和反向代理

时间:2015-08-28 21:40:56      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:代理服务器   客户端   程序   技术   网络   

1.负载均衡和反向代理介绍

负载均衡是多台服务器对称方式组成一个服务器的集合,每个服务器都能单独对外提供服务,通过负载均衡技术,将客户端请求均匀的分配到服务器集合中的某个服务器上,然后服务器独立响应客户端的请求,这样解决了高并发的访问。

反向代理是指以代理服务器接受用户请求,然后将请求,转发给内部网络上的服务器,并将从服务器上得到的结果返回给用户,这时代理服务器对外表现为一个服务器,代理服务器上没有保存任何的网页数据,所有的静态网页和CGI程序都保存在内部网络上的web服务器上,增加了web服务的安全性。

2.常见的负载均衡方法

2.1用户手动选择,在下载业务的网站中常见。

2.2DNS轮询,一个域名,可以解析到多个服务器。但是可靠性不高,一旦某个服务器宕机,解析到此服务器的请求就不能响应,而且DNS缓存时间比较长,即使去掉DNS中服务器解析也不能立即生效,另外一个问题负载不均衡,因为不能反映各个服务器的运行情况和性能,同时DNS缓存又使解析都到了同一个服务器上。

2.3四/七层负载均衡

这个四七层指的是OSI标准的网络模型,四层是传输层,七层是应用层。

四层负载均衡可以使用硬件实现如:F5 BIG-IP、Citrix NetScaler等,价格不菲。不过也可以使用软件的方式实现,代表是国人章文嵩博士研发的LVS。

七层负载均衡大体使用HTTP反向代理方式,代表是Nginx、HAProxy等,这里主要说下Nginx,因为它能很好配置,同时可以按轮询,IPHash、权重、URLHash等方式实现负载均衡,也能检查后端服务器的健康状态。

3.一个nginx反向代理服务器的大体配置

user  nginx nginx;
worker_processes  1; #一般与CPU数量相等

error_log  /var/log/nginx/error.log crit; #错误日志记录路径,错误类型crit:记录最少错误
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /var/run/nginx.pid; #主进程号位置
worker_rlimit_nofile 51200;  #打开最多文件数

events {
    use epoll;    #使用的IO模型,这里是事件触发型
    worker_connections  51200;   #最大连接数
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128; #内存中缓存服务器名的hash表大小
    client_header_buffer_size 32k;   #用户头信息的缓冲大小,如果用户cookie大就设定大点
    large_client_header_buffers 4 32k;  #缓冲头信息的数量,和大小

    #log_format  main  $remote_addr - $remote_user [$time_local] "$request" 
    #                  $status $body_bytes_sent "$http_referer" 
    #                  "$http_user_agent" "$http_x_forwarded_for";

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay on; #禁用nagle算法,这个算法不适用与C/S的情况
    fastcgi_connect_timeout 300; #fastcgi进程连接超时时长
    fastcgi_send_timeout 300;    #发送超时时长
    fastcgi_read_timeout 300;    #响应超时时长
    fastcgi_buffer_size 64k;     #缓冲头大小
    fastcgi_buffers 4 64k;       #缓冲数量和大小,一般是站点中php/java脚本所产生页面大小中间值
    fastcgi_busy_buffers_size 128k;  #默认fastcgi_buffer_size两倍
    fastcgi_temp_file_write_size 128k; #缓存临时文件的大小默认fastcgi_buffer_size两倍

    gzip on;
    gzip_min_lenth 1k;  #最少压缩的数据大小
    gzip_buffers 4 16k;  #缓冲大小 
    gzip_http_version 1.1;  #版本
    gzip_comp_level 2;   #压缩比
    gzip_types     text/plain application/x-javascript   text/css   application/xml;   #压缩文件mime类型
    gzip_vary on;   #head头上加vary头,判断代理服务器是否支持压缩


    client_max_body_size 300m;   #最大请求单个文件大小
    client_body_buffer_size  128k;  #请求缓冲区大小
    proxy_connect_timeout 600;    #连接超时时间
    proxy_read_timeout  600;    #连接后响应超时时间
    proxy_send_timeout  600;   #连接后传送数据超时时间
    proxy_buffer_size  16k;       #缓冲大小
    proxy_buffers  4  32k;     #缓冲大小和数量
    proxy_busy_buffers_size 64k;     #系统繁忙时,缓冲申请的最大空间 
    proxy_temp_file_write_size  64k;   #临时文件缓存大小
 

    upstream php_server_pool {
     server 192.168.226.131:80 max_fails=2 fail_timeout=30s;   #定义服务器组
      server 192.168.226.132:80 max_fails=2 fail_timeout=30s;
     ip_hash;   #解决session绑定问题,但是负载均衡效果一般。
    }
    


    server  {
    listen 80;
    server_name www.shiyan.com;
    location /  {
        proxy_next_upstream http_502 http_504 timeout invalid_header;   #响应码为多少时,请求发往另外的服务器
         proxy_pass  http://php_server_pool;   #服务器组
         proxy_set_header Host www.shiyan.com;    #访问的域名
         proxy_set_header X-Forwarded-For $remote_addr;   #访问经过的代理服务器,和客户端的真是IP
    }
    access_log /var/log/nginx/www.shiyan.com_access.log;
   }

当然通过upstream指令和server指令完全可以实现反向代理的动静网页分离,通过定义location的请求文件格式,去访问静态缓存服务器和不同的服务器组,上文没有多说这方面。

4.Nginx负载均衡的HTTP Upstream模块

4.1   ip——hash指令

后端是多个动态应用服务器时,能够将一个客户端的请求定义到同一台服务器上,能解决session问题,但是这样权重等方法失去效果,负载均衡不好,能session共享来替换它。

4.2  server指令

主要是后端服务器的名称,参数,名称可以是域名,ip端口。参数weigth权重,max_fails对后端服务器请求失败次数,fail_timeout请求失败后超时时间,down标记服务器永久离线,backup标记服务器在非backup服务器全部宕机或者都繁忙时启用。

4.3 upstream指令

定义服务器组,变量:$upstream_addr 请求的upstream服务器ip, $upstream_status服务器的应答状态,$upstream_response_time响应时间,$upstream_http_$HEADER 任意的HTTP协议头信息。

Nginx HTTP 负载均衡和反向代理

标签:代理服务器   客户端   程序   技术   网络   

原文地址:http://jianchixuexi.blog.51cto.com/4026260/1689387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!