如何利用nginx为多个xxljob配置统一入口,而且用户登录后ip固定不会飘?

  首先,需要确保这些xxljob的上下文路径是一致的,上下文路径可以在根目录下xxl-job-admin/src/main/resources/application.properties中的server.servlet.context-path字段得知,默认为/xxl-job-admin。

  然后修改nginx.conf文件,其中location字段与proxy_pass中的路径需要与xxljob的上下文路径保持一致。

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream xxljob-server{
        ip_hash;
        server XXX.XX.XX.XX:10100;#第一个xxljob后端地址
        server XXX.XX.XX.XX:10100;#第二个xxljob后端地址
    }
    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /xxl-job-admin/ {
            proxy_pass http://xxljob-server/xxl-job-admin/;
            index index.html index.htm;
        }
    }
}

顺便总结下nginx的upstream负载均衡支持5种分配方式

1.轮询(默认方式):每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

2.weight :可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。

upstream server {
     server XXX.XX.XX.XX weight=1;#第一个后端地址
     server XXX.XX.XX.XX weight=2;#第二个后端地址
     server XXX.XX.XX.XX weight=3;#第三个后端地址
}

3.ip_hash:每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。

4.fair:fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。

upstream server {
     fair;
     server XXX.XX.XX.XX;#第一个后端地址
     server XXX.XX.XX.XX;#第二个后端地址
     server XXX.XX.XX.XX;#第三个后端地址
}

5.url_hash:与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。

upstream server {
     hash $request_uri;
     server XXX.XX.XX.XX;#第一个后端地址
     server XXX.XX.XX.XX;#第二个后端地址
     server XXX.XX.XX.XX;#第三个后端地址
}