美文网首页nginx 负载均衡
Nginx安装,启动,配置,编辑文件,负载均衡

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

作者: zone7_ | 来源:发表于2016-12-20 21:30 被阅读175次

    安装 <环境为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
    关于负载均衡的一些文章:
    全栈必备 负载均衡
    大型网站架构系列:负载均衡详解

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/vryfvttx.html