nginx负载均衡

一、 upstream模块

      1、nginx的负载均衡功能依赖于ngx_http_upstream_module模块,支持的所有代理方式有proxy_pass,fastcgi_pass,memcached_pass

      2、upstream模块语法

      upstream配置时应放于http{}标签内;模块默认算法是wrr

      3、upstream 参数

参数描述

service

反向服务地址 加端口

weight

权重

max_fails

失败多少次 认为主机已挂掉则,踢出

fail_timeout

踢出后重新探测时间

backup

备用服务

backup

备用服务

max_conns

允许最大连接数

slow_start

当节点恢复,不立即加入

     4、权重算法

  • 轮询+weight   默认的
  • ip_hash : 基于Hash 计; 应用场景:保持session 一至性
  • url_hash: (第三方);  应用场景:静态资源缓存,节约存储,加快速度
  • least_conn 最少链接
  • least_time 最小的响应时间,计算节点平均响应时间,然后取响应最快的那个,分配更高权重。

二、http proxy模块

    1、http proxy模块参数

http proxy模块参数说明
proxy_set_header X-Forwarded-For $remote_adrr设置http请求header项传给后端服务节点,例如:可实现让代理后端的服务节点获取访问客户端用户的真实IP地址
proxy_set_header Host $Host当后端web服务器有多个虚拟主机时,需要用该Header来区分反向代理哪个主机
client_body_buffer_size用于指定客户端请求主体缓冲区大小,此处如果了解前面的http请求包的原理就好理解了
proxy_connect_timeout表示反向代理与后端节点服务器连接的超时时间,即发起握手等候相应超时时间
proxy_send_timeout表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则Nginx将断开这个连接
proxy_buffer_size设置缓存区大小,默认该缓存区等于指令proxy_buffer设置的大小
proxy_buffer设置缓存区的数量和大小,Nginx从代理的后端服务器获取的响应信息,会放置到缓存区
proxy_busy_buffer_size用于设置系统很忙是可以使用的proxy_buffer大小,官方推荐大小为proxy_buffers*2
proxy_temp_file_write_size指定proxy缓冲临时文件的大小
proxy_read_timeout设置Nginx从代理的 后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的相应时间,其实是Nginx已经进入后端的排队之中等候处理的时间
LogFormat "\"%{X-Forwarded-For }i\"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined            #web记录通过代理访问的客户真实ip的格式配置,httpd.conf

三、nginx反向代理

服务器环境:centos7 系统,4台
lb01:192.168.1.101
lb02:192.168.1.102
web01:192.168.1.103
web02:192.168.1.104

1、web服务安装
[root@web01 ~]# yum install httpd -y
[root@web02 ~]# yum install httpd -y
[root@web01 ~]# systemctl start httpd
[root@web02 ~]# systemctl start httpd
[root@web01 ~]# netstat -anp | grep httpd      #检查httpd是否启动
[root@web02 ~]# netstat -anp | grep httpd      #检查httpd是否启动
[root@web01 ~]# echo 192.168.1.103 >/var/www/html/index.html
[root@web02 ~]# echo 192.168.1.104 >/var/www/html/index.html

2、nginx安装
[root@web01 ~]# mkdir -p /app/nginx-1.8.1   #安装包下载及环境准备
[root@web02 ~]# mkdir -p /app/nginx-1.8.1
[root@lb01 ~]# yum install pcre-devel -y
[root@lb01 ~]# yum install openssl-devel -y
[root@lb02 ~]# yum install pcre-devel -y
[root@lb02 ~]# yum install openssl-devel -y
[root@lb01 ~]# yum install gcc gcc-c++ autoconf automake make -y
[root@lb02 ~]# yum install gcc gcc-c++ autoconf automake make -y
[root@lb01 ~]# groupadd nginx && useradd -g nginx nginx -s /bin/false
[root@lb02 ~]# groupadd nginx && useradd -g nginx nginx -s /bin/false
[root@lb01 ~]# tar -xvf nginx-1.8.1.tar.gz    #解压安装包
[root@lb02 ~]# tar -xvf nginx-1.8.1.tar.gz 
[root@lb01 ~]# cd nginx-1.8.1            #进入解压的安装文件,然后开始安装,以lb01为例
[root@lb01 nginx-1.8.1]# ./configure --prefix=/app/nginx-1.8.1/ --user=nginx --group=nginx --with-http_sub_module --with-http_ssl_module
[root@lb01 nginx-1.8.1]# make
[root@lb01 nginx-1.8.1]# make install
#lb02安装步骤同上,此处省略
[root@lb01 nginx-1.8.1]# /app/nginx-1.8.1/sbin/nginx     #启动nginx并检查启动成功否
[root@lb01 nginx-1.8.1]# netstat -anp | grep nginx
[root@lb02 nginx-1.8.1]# /app/nginx-1.8.1/sbin/nginx     #启动nginx并检查启动成功否
[root@lb02 nginx-1.8.1]# netstat -anp | grep nginx
[root@lb01 nginx-1.8.1]# curl 192.168.1.101
[root@lb02 nginx-1.8.1]# curl 192.168.1.102

3、配置负载均衡
用192.168.1.101来做负载
[root@lb01 ~]# cd /app/nginx-1.8.1/conf/
[root@lb01 conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf
[root@lb01 conf]# vim nginx.conf    #编辑配置文件
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

upstream webpools {                      #upstream配置时,后面不能使用"_"线
  server 192.168.1.103:80 weight=5;
  server 192.168.1.104:80 weight=5;
  server 192.168.1.105:80 weight=5 backup;    #备用节点
}
    server {
        listen       80;
        server_name  www.shitouji.com;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://webpools;
        }
    }
}

[root@lb01 ~]# /app/nginx-1.8.1/sbin/nginx -t     #检查配置文件语法
[root@lb01 ~]# /app/nginx-1.8.1/sbin/nginx -s reload
#测试
[root@lb02 ~]# curl 192.168.1.101
192.168.1.103
[root@lb02 ~]# curl 192.168.1.101
192.168.1.104
[root@lb02 ~]# curl 192.168.1.101
192.168.1.103
4、其它应用配置说明
[root@lb01 conf]# vim nginx.conf    #编辑配置文件
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

upstream webpools {                      #upstream配置时,后面不能使用"_"线
  server 192.168.1.103:80 weight=5;
  server 192.168.1.104:80 weight=5;
  server 192.168.1.105:80 weight=5 backup;    #备用节点
}
    server {
        listen       80;
        server_name  www.shitouji.com;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://webpools;
            proxy_set_header Host $Host;             #当web服务器上有多个虚拟主机服务时,可以通过此设置来指向对应的虚拟主机

            proxy_set_header X-Forwarded-For $remote_addr;     #将真实客户机的IP推给后端web服务记录,web服务需要更改日志格式为:LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        }  
    }
}

5、动静态分离
[root@lb01 conf]# vim nginx.conf    #编辑配置文件
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

upstream static {                      #upstream配置时,后面不能使用"_"线
  server 192.168.1.103:80 weight=5;
}
upstream dynamic {                      #upstream配置时,后面不能使用"_"线
  server 192.168.1.104:80 weight=5;
}
    server {
    listen 80;
    server_name 192.168.1.103; #  当接收到http请求时,首先host和这里的server_name进行匹配,如果匹配上,则走这个虚拟主机的location路由

    location /static/~(.*)(\.jpg|\.png|\.gif|\.jepg|\.css|\.js|\.css){  #  静态资源则路由到这里;#基于扩展名
    alias html;  
  }

  location /dynamic/ {  #  其他的url则转发到 http://192.168.1.104;基于路径
    proxy_pass http://dynamic;
       include proxy.conf;
  }

       proxy_set_header Host $Host;             #当web服务器上有多个虚拟主机服务时,可以通过此设置来指向对应的虚拟主机

       proxy_set_header X-Forwarded-For $remote_addr;     #将真实客户机的IP推给后端web服务记录,web服务需要更改日志格式为:LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值