nginx+sticky安装及负载均衡使用

技术 专栏收录该内容
3 篇文章 0 订阅

nginx+sticky安装及负载均衡使用

sticky的工作原理

Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route

  1. 客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
  2. 后端服务器处理完请求,将响应数据返回给nginx。
  3. 此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
  4. 客户端接收请求,并保存带route的cookie。
  5. 当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

nginx+sticky安装

nginx安装最好采用编译安装的方式,这样可以很方便的找到nginx的安装位置,方便添加nginx-sticky模块。如果之前已经编译安装过nginx,只是添加sticky模块,则可跳过nginx安装解压等过程,直接进行步骤4

  1. 获取linux下的nginx安装包,官网下载 https://nginx.org/en/download.html, 书写本文档时使用的安装包为nginx-1.14.0.tar.gz

  2. 获取nginx-sticky模块包,一个比较靠谱的github下载地址 https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads/ , 书写本文档时使用的安装包为nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

  3. 安装前编译环境准备

    • centos:
    yum -y install gcc-c++  pcre pcre-devel  zlib zlib-devel openssl openssl-devel --setopt=protected_multilib=false 
    • ubuntu:
    apt-get install build-essential libtool libpcre3 libpcre3-dev
  4. 安装步骤

    • 解压nginx和sticky安装包
    tar -zxvf nginx-1.14.0.tar.gz
    unzip -D nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
    mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module-ng
    cd nginx-1.14.0
    • 输入安装命令并指定安装路径,可以再添加其他需要的属性,但最好不要减少,否则sticky模块添加过程可能出现报错;如果之前已经编译安装过nginx,可以用nginx -V指令查看之前的命令,在之前configure argument的基础上添加下列安装属性
    ./configure --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --add-module=${absolutPath}/nginx-sticky-module-ng

    ${absolutePath}为本机上nginx-sticky-module-ng文件夹所在路径

    出现如下提示信息表示没有问题:

    这里写图片描述

    • 执行编译安装(覆盖安装)

      make && make install

      安装成功后输入指令查看编译信息:

      /usr/local/nginx/sbin/nginx -V

    这里写图片描述
    可以看到上一次编译使用的是我们输入的指令

    启动nginx

    /usr/local/nginx/sbin/nginx

    之后可以访问80端口在网页上查看效果, 此时sticky模块也一起生效,可以在nginx.conf中使用了

    • 将nginx设置为系统服务
    vim /lib/systemd/system/nginx.service
    [Unit]  
    Description=The nginx HTTP and reverse proxy server  
    After=syslog.target network.target remote-fs.target nss-lookup.target  
    
    [Service]  
    Type=forking  
    PIDFile=/usr/local/nginx/logs/nginx.pid  
    ExecStartPre=/usr/local/nginx/sbin/nginx -t  
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  
    ExecReload=/bin/kill -s HUP $MAINPID  
    ExecStop=/bin/kill -s QUIT $MAINPID  
    PrivateTmp=true  
    
    [Install]  
    WantedBy=multi-user.target 
    chmod 745 /lib/systemd/system/nginx.service
    systemctl enable nginx.service

    完成后就可以使用以下这些命令了

    systemctl start nginx
    systemctl stop nginx
    systemctl restart nginx
    systemctl status nginx

负载均衡配置(需要结合具体项目,仅供参考需要)

/usr/local/nginx/conf/nginx.conf关键配置如下(配置在http块中):

upstream backend {
        sticky; #使用sticky算法
        server 114.55.91.85:8180; #后端服务器1
        server 106.14.81.62:8180; #后端服务器2
    }

    #负载均衡设置
    server{
        listen       8080;
        server_name  _;
        location / {
            proxy_pass         http://backend;
            proxy_set_header   Host             $host;
            proxy_http_version 1.1;                     #websocket
            proxy_set_header Upgrade $http_upgrade;     #websocket
            proxy_set_header Connection "upgrade";      #websocket
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }

    #前端静态资源部署
    server {
        listen       80;
        server_name  ide.mooctest.net; #服务器对应ip
        root         /software/webide-frontend; #前端静态文件所在位置

        location / {
        }

        location /ws {
            rewrite ^/ws/.*$ /workspace.html;
        }
    }

有时间再来详细写写nginx的配置啦

参考链接

https://blog.csdn.net/ITYang_/article/details/70145956
https://www.linuxidc.com/Linux/2017-09/146776.htm
https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/overview

  • 2
    点赞
  • 0
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

Stickynginx的一个模块,它是基于cookie的一种nginx负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。 (b)后端服务器处理完请求,将响应数据返回给nginx。 (c)此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值 (d)客户端接收请求,并保存带route的cookie。 (e)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。 其他需要注意的 (a)同一客户端的请求,有可能落在不同的后端服务器上。如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。 (b)cookie不一定生效。由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。 (c)客户端可能不带cookie。Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky负载均衡,请对Android开发说加上cookie。 (d)cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。 (e)客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。 (f)Nginx sticky模块不能与ip_hash同时使用 sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly]; [name=route] 设置用来记录会话的cookie名称 [domain=.foo.bar] 设置cookie作用的域名 [path=/] 设置cookie作用的URL路径,默认根目录 [expires=1h] 设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值 [hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5 [no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置 [secure] 设置启用安全的cookie,需要HTTPS支持 [httponly] 允许cookie不通过JS泄漏,没用过
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值