最近我们用python开发了一套SSO、然后权限系统一起的一次大更新上线,上线后发现SSO无法正常工作,但测试环境一直无问题。
问题描述
问题URL
http://sso.a.com/signin?redirect_uri=http://tomcat
正常URLhttp://sso.a.com/signin?redirect_uri=http://b.c.com
排查
检查代码啥的发现没问题,把动态获取的host改成静态的域名,单启进程后正常,问题定位在nginx的负载上.
nginx domain配置文件
upstream tomcat {
server 10.143.88.240:10086;
}
server {
listen 80 ;
server_name xxxx;
gzip on;
gzip_static on;
gzip_vary on;
gzip_proxied any;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_disable "msie6";
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain text/css text/javascript application/javascript application/x-javascript;
location / {
proxy_pass http://tomcat;
}
}
稍微思考一下,upstream中的name是一个变量,而做为变量即可得到后端地址,而不是直接给后端地址。
处理
将upstream中的name改成实际的域名,在这里即是b.c.com即可以获取,然后工作正常。
查看官主解释
默认情况下,nginx按加权轮转的方式将请求分发到各服务器。 在上面的例子中,每7个请求会通过以下方式分发: 5个请求分到backend1.example.com, 一个请求分到第二个服务器,一个请求分到第三个服务器。 与服务器通信的时候,如果出现错误,请求会被传给下一个服务器,直到所有可用的服务器都被尝试过。 如果所有服务器都返回失败,客户端将会得到最后通信的那个服务器的(失败)响应结果。
本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/2057112,如需转载请自行联系原作者