博客 / 詳情

返回

nginx-sticky怎麼用 Nginx 負載均衡添加 sticky 模塊完整步驟

第一步:先搞懂這是啥

nginx-sticky是個能讓用户每次訪問都落到同一台後端服務器的插件(比如你有好幾台Tomcat/Node服務器,用它就能讓用户一直連其中一台)。解壓後一般是 .c文件(比如 ngx_http_sticky_module.c)和説明文檔。

第二步:準備環境(必須裝這些!)

  1. 裝Nginx源碼:去 Nginx官網下和你現在用的Nginx版本一致的源碼(別版本對不上,不然編譯會炸),nginx-sticky安裝包下載:https://pan.quark.cn/s/ed2504ebd68d
  2. 裝依賴工具:編譯需要 gccmakepcre-devel(正則支持)、zlib-devel(壓縮支持),Linux直接敲:

    # CentOS/RHEL
    yum install gcc make pcre-devel zlib-devel -y
    # Ubuntu/Debian
    apt-get install gcc make libpcre3-dev zlib1g-dev -y

第三步:把插件編進Nginx裏

假設你的Nginx安裝在 /usr/local/nginx,源碼放在 /opt/nginx-1.20.2,插件解壓在 /opt/nginx-sticky

  1. 進Nginx源碼目錄

    cd /opt/nginx-1.20.2
  1. 配置編譯參數(關鍵!)

    先看看你原來的Nginx編譯了啥參數(記下來!):

    /usr/local/nginx/sbin/nginx -V  # 注意是大寫V,會輸出 --prefix=/usr/local/nginx ... 這些
然後複製這些參數,加上插件的路徑,執行 `./configure`。比如原來參數是 `--prefix=/usr/local/nginx`,現在加插件的路徑(假設插件 `.c`文件在 `/opt/nginx-sticky`):

```
./configure --prefix=/usr/local/nginx [你原來的其他參數] --add-module=/opt/nginx-sticky
```



(`[你原來的其他參數]`就是 `-V`輸出的那些,比如 `--with-http_ssl_module`之類的,別漏!)
  1. 編譯安裝

    make  # 只編譯,別make install!不然會覆蓋原Nginx
編譯完,把新生成的 `objs/nginx`替換原來的Nginx可執行文件(記得先停Nginx!):

```
# 停Nginx(如果開着的話)
/usr/local/nginx/sbin/nginx -s stop
# 備份原Nginx(以防翻車)
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
# 替換成新的
cp objs/nginx /usr/local/nginx/sbin/nginx
```


第四步:改Nginx配置文件

打開你的Nginx配置文件(一般在 /usr/local/nginx/conf/nginx.conf),在 upstream塊里加 sticky;(就這麼簡單!)。

舉個栗子:

http {
    upstream my_servers {  # 你的後端服務器組
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        sticky;  # 加上這句,啓用粘性會話
        # 可選參數:比如 sticky expires=1h domain=.example.com path=/;
        # expires 是cookie過期時間,domain/path 是cookie作用域
    }

    server {
        listen 80;
        location / {
            proxy_pass http://my_servers;  # 代理到上面的upstream
        }
    }
}

第五步:測試能不能用

  1. 檢查配置有沒有錯

    /usr/local/nginx/sbin/nginx -t
顯示 `ok`和 `successful`就沒問題。
  1. 啓動/重啓Nginx

    /usr/local/nginx/sbin/nginx  # 啓動
    # 或者重啓:/usr/local/nginx/sbin/nginx -s reload
  1. 驗證效果

    開兩個瀏覽器(或清緩存),反覆刷新頁面,看是不是一直訪問同一台後端服務器(可以看後端服務器的日誌,比如Tomcat的 localhost_access_log,IP對應的請求是不是都落一台)。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.