一、架构:
使用的架构是nginx+SLB(负载均衡)+2个iserver(ip分别为192.168.0.1和192.168.0.1)
二、起因
请求iserver数据时,iserver默认会发送login请求(一个get和post的login请求),只有登录成功iserver才可以返回数据。又因为SLB轮询,所以两次login请求可能执行的服务器不同,导致登录失败无法获取数据。
三、解决
拦截请求,将所有登录请求指定固定的服务器处理,详细配置如下
location ~*/realspace/login { charset utf-8; add_header Cache-Control no-store; proxy_cache off; proxy_pass http://192.168.0.1:8090;#指定ip为1的服务器处理登录 rewrite ^/gisServer/(.*)$ /$1 break; } location ^~/gisServer{ charset utf-8; add_header Cache-Control no-store; # 请求为OPTIONS预检时,直接返回 if ($request_method = OPTIONS ) { return 204; } #此处是将进入请求的路径中包含字符串"/realspace/login"交给固定server处理 set $URL $scheme://$http_host$request_uri; if ($URL ~ "/realspace/login") { proxy_pass http://192.168.0.1:8090; #指定ip为1的服务器处理登录 rewrite ^/gisServer/(.*)$ /$1 break; } proxy_cache off; proxy_pass http://192.168.0.3:8090;#这个是SLB地址,也可以配置nginx的upstream rewrite ^/gisServer/(.*)$ /$1 break; client_max_body_size 100M; }