nginx的负载模式

多节点负载的配置

1
2
3
4
5
6
7
8
9
10
11
upstream client {
server 192.168.2.1:20031 weight=1;
server 192.168.2.1:20011 weight=1;
}
server {
listen 80;
server_name 0.0.0.0;
location / {
proxy_pass http://client;
}
}

upstream 的分配方式

  1. 轮询

    1
    2
    3
    4
    upstream client {
    server 192.168.2.1:20031;
    server 192.168.2.1:20011;
    }
  2. 权重

    1
    2
    3
    4
    upstream client {
    server 192.168.2.1:20031 weight=1;
    server 192.168.2.1:20011 weight=1;
    }
  3. ip_hash:每个请求按照访问IPhash结果分配,这样每个client固定访问一个后端,可以解决session一致的问题。

    1
    2
    3
    4
    5
    upstream client {
    ip_hash;
    server 192.168.2.1:20031 weight=1;
    server 192.168.2.1:20011 weight=1;
    }
  4. url_hash:每个请求按照urlhash结果分配,使得每个url固定访问一个后端,主要用于缓存服务器。

    1
    2
    3
    4
    5
    6
    7
    upstream client {
    hash $request_uri;
    # 一致性算法
    hash_method crc32;
    server 192.168.2.1:20031 weight=1;
    server 192.168.2.1:20011 weight=1;
    }
  5. fair:根据后端响应时间来分配,即rt越短,有限分配级别越高

    1
    2
    3
    4
    5
    upstream client {
    fair;
    server 192.168.2.1:20031 weight=1;
    server 192.168.2.1:20011 weight=1;
    }

upstream节点参数配置

server 后的参数

1
2
3
4
upstream client {
server 192.168.2.1:20031 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.2.1:20011 weight=1;
}
  • address:地址必须配置
  • down:标记 server 停用
  • backup:标记是备用服务器
  • weight:设置权重
  • max_failsfail_timeout:错误次数、达到错误次数多久不再访问

引用参数

fastcgi.conf 文件里有一些可以使用的参数

1
2
3
4
5
6
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://client;
}

一个多节点负载的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
http {
include mime.types;
default_type application/octet-stream;

sendfile on;

#keepalive_timeout 0;
keepalive_timeout 65;

server {
listen 80;
server_name 0.0.0.0;
location / {
proxy_pass http://client;
}
}
upstream client {
server 192.168.2.1:20031 weight=1;
server 192.168.2.1:20011 weight=1;
}
}

校验客户端IP指向固定的集群地址

1
2
3
4
5
6
7
location / {
# 可以配置多个IP
if($remote_addr ~"192.168.2.8|9") {
proxy_pass http://client2;
}
proxy_pass http://client;
}

proxy_pass 路径

URL地址:127.0.0.1/demo/index.html

实际访问i地址:client/demo/index.html

1
2
3
4
5
6
7
location /demo {
proxy_pass http://client;
}
# 等同于
location / {
proxy_pass http://client/demo/;
}

静态地址

URL地址:127.0.0.1/index.html

实际访问i地址:/home/front/index.html

1
2
3
location / {
root /home/front/;
}

安装之前

1
sudo yum install -y yum-utils

前后端分离的集群 session处理

后端是一个集群部署,后端路径与前端路径不同,则需要复制 session。

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 10001;
server_name 0.0.0.0;
location /auth {
proxy_pass http://authServer;
proxy_cookie_path /auth /;

}
location / {
root /home/maxzhao/auth/frontend/;
index index.html;
}

如果是 java 后端,还需要配置

1
2
3
4
5
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedHeaders()
.allowedMethods()
.exposedHeaders();

本文地址: https://github.com/maxzhao-it/blog/post/aa6dc455/