nginx 负载均衡

Nginx安装,启动,配置,编辑文件,负载均衡

2016-12-20  本文已影响175人  zone7_

安装 <环境为centos7.0>

wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum install nginx

sudo systemctl enable nginx.service

systemctl start nginx 启动

service nginx start  //启动
service nginx stop  //停止
service nginx restart   //重启
service nginx reload    //重新加载配置文件

配置
记得修改配置后,重启 nginx 或者重载配置


Paste_Image.png

一般nginx.conf 的配置文件都存在如下目录中的其中一个:

/usr/local/nginx/conf
/etc/nginx
/usr/local/etc/nginx

我的nginx目录如下
编辑文件
在centos下编辑文件,

vi nginx.conf   //打开filename文件
:w       //保存文件
:w vpser.net //保存至vpser.net文件
:q          //退出编辑器,如果文件已修改请使用下面的命令
:q!        //退出编辑器,且不保存
:wq         //退出编辑器,且保存文件

a      //在当前光标位置的右边添加文本
i       //在当前光标位置的左边添加文本
A     //在当前行的末尾位置添加文本
I      //在当前行的开始处添加文本(非空字符的行首)
O     //在当前行的上面新建一行
o     //在当前行的下面新建一行
R    //替换(覆盖)当前光标位置及后面的若干文本
J    //合并光标所在行及下一行为一行(依然在命令模式)

详细用法请戳链接

nginx.conf 文件中的模块:
http -> server -> location 一级包涵一级
这里我为了方便查看,把几个server都放在一起,一般是一个server放到一个 .conf 文件中的。
这里通过 vi nginx.conf 进行编辑:

http {
server {
    listen       80;
    server_name  localhost;
    root   html;
    index  index.html index.htm;

     location /app {
          root /html/app;
          index app.html;
     }
 }

upstream test.com {
#  ip_hash;
  server localhost:3000;
  server localhost:1234;
}

server {
    listen       8080;
    server_name  localhost;

     location / {
          proxy_pass          http://test.com ;
     #   proxy_pass          http://115.22.1.8
     }
 }

}

一个server相当于一个虚拟主机
listen 指当前server监听的端口,
server_name 指的是Ip地址,
root 指的的当前server 的根目录,
index 指的是默认主页
例如 我本机访问:http://localhost
返回的就是 html目录下的 index.html

在一个server中的 location 的概念相当于 nodejs 和 think php 中的路由,就是匹配路径。
如果有多个 location 匹配成功,那么 nginx 会匹配前缀最长的
例如 我本机访问:http://localhost/app
返回的就是 html/app 目录下的 app.html
location匹配规则

~      波浪线表示执行一个正则匹配,区分大小写
~*    表示执行一个正则匹配,不区分大小写
^~    ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
=      进行普通字符精确匹配
 proxy_pass  就是转发的作用

代码中是将 http://localhost:8080 收到的请求转发到 upstream test.com
注释代码中是将 http://localhost:8080 收到的请求 转发到 http://115.22.1.8

负载均衡
继续接着上面的代码:
在 upstream 模块中,:配置了 两个均衡服务器,我这里是本机开启了两个不同端口的服务。你也可以配置 远程的服务器,如下:

upstream test.com {
      #ip_hash;
server 115.22.1.1:3000 weight=2;
server 115.22.1.2:3000 weight=1;
server 115.22.1.3:3000 weight=1 max_fails=2 fail_timeout=30s;
server 115.22.1.4:3000 down;
server 115.22.1.5:3000 backup;
}
# weight 表示权重,权重越大,被分配的任务越多
# max_fails 最大失败次数
# fail_timeout 失败时间
# down 不参与负载
# backup 当其他服务器繁忙,或者宕机时,启用该服务器

在 upstream 模块的下面还有一个 server 这个是代理服务器,就是通过这个代理服务器来均衡请求的。
例如: 我本机访问 http://localhost:8080/app ,
第一次请求会分配到 115.22.1.1:3000/app 的服务器上
第二次请求会分配到 115.22.1.2:3000/app 的服务器上
分配算法:(# 号为注释)

这段解释是是摘自:
文/conghua(简书作者)
原文链接:http://www.jianshu.com/p/90831a94ce43
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。

ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。

fair。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

url_hash。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

参考:
http://www.jianshu.com/p/d5114a2a2052
http://www.jianshu.com/p/311a1d12145f
关于负载均衡的一些文章:
全栈必备 负载均衡
大型网站架构系列:负载均衡详解

上一篇下一篇

猜你喜欢

热点阅读