第一步:先搞懂這是啥
nginx-sticky是個能讓用户每次訪問都落到同一台後端服務器的插件(比如你有好幾台Tomcat/Node服務器,用它就能讓用户一直連其中一台)。解壓後一般是 .c文件(比如 ngx_http_sticky_module.c)和説明文檔。
第二步:準備環境(必須裝這些!)
- 裝Nginx源碼:去 Nginx官網下和你現在用的Nginx版本一致的源碼(別版本對不上,不然編譯會炸),nginx-sticky安裝包下載:https://pan.quark.cn/s/ed2504ebd68d
-
裝依賴工具:編譯需要
gcc、make、pcre-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。
-
進Nginx源碼目錄:
cd /opt/nginx-1.20.2
-
配置編譯參數(關鍵!) :
先看看你原來的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`之類的,別漏!)
-
編譯安裝:
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
}
}
}
第五步:測試能不能用
-
檢查配置有沒有錯:
/usr/local/nginx/sbin/nginx -t
顯示 `ok`和 `successful`就沒問題。
-
啓動/重啓Nginx:
/usr/local/nginx/sbin/nginx # 啓動 # 或者重啓:/usr/local/nginx/sbin/nginx -s reload
-
驗證效果:
開兩個瀏覽器(或清緩存),反覆刷新頁面,看是不是一直訪問同一台後端服務器(可以看後端服務器的日誌,比如Tomcat的
localhost_access_log,IP對應的請求是不是都落一台)。