nginx upstream 一些配置

Posted on Posted in nginx

nginx 反向代理保持 session 保持

基于 IP

  • down 表示当前server 不参与负载
  • weight 默认为1 数字越大 负载权重越大
  • max_fails 允许请求失败的次数 当超过最大次数 返回proxy_next_upstream模块定义的错误
  • fail_timeout:max_fails次失败后,暂停的时间
  • backup: 其他所有的非backup机器down或者忙的时候 请求这台机器,这台机器的压力最小
upstream abc.com {  #指定负载均衡的模块名  
    ip_hash;    #每个请求按访问IP的hash结果分配。这样一个IP固定访问一个后端服务器,解决session问题。  
    server 192.168.1.2:80;  
    server 192.168.1.3:80 down;     #表示不参与负载,backup其他机器出现故障或忙时,启用  
    server 192.168.1.4:8009 max_fails=3 fail_timeout=20s;   #允许失败的次数。超过时,返回proxy_next_upstream模块定义的错误  
    server 192.168.1.5:8080 weight=100;  
    server 192.168.1.6:8080 backup;  
    keepalived 300; # nginx和后端机器的连接保持
    } 

基于 cookie (推荐)

安装

nginx 编译模块,如果是重新编译,把编译后的 nginx 执行文件覆盖掉旧的 nginx 上即可

./configure --prefix=/usr/local/nginx-1.0.6 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=../nginx-sticky-module-1.1

语法

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以为任何的string字符,默认是route
domain:哪些域名下可以使用这个cookie
path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡
expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用

使用

upstream backend {
    server 1.example.com;
    server 2.example.com;
    sticky expires=1h domain=liuhonghe.me path=/; # 加在这里即可
}

tips: nginx sticky模块不能与ip_hash同时使用

nginx 反向代理故障转移

配置

location /{
...
proxy_read_timeout 1; 
proxy_next_upstream http_502 http_504 error invalid_header;  
...
}

错误说明

proxy_read_timeout 1;
proxy_next_upstream http_502 http_504 error timeout invalid_header;

配置了timeout,如果后端有10台机器,就需要等待10秒

nginx 长连接

两个全局参数

  • keepalive_timeout 75 表示一个长连接如果在time秒没有数据传输,nginx将会主动断掉该连接。nginx默认是75s,一般qps比较大时可以将该时间改小,建议timewait状态的连接数。
  • keepalive_requests 100 表示一个长连接最多接收100次数据传输,nginx将会断掉该长连接。nginx默认是100次。可以多设置

附一份 pdf

learning-nginx

» 转载请注明来源:若我若鱼 » nginx upstream 一些配置

Leave a Reply

Your email address will not be published. Required fields are marked *

1 × 2 =