第一步:先搞懂这是啥
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对应的请求是不是都落一台)。