问题背景:
首先是在ecs上已经搭建好一套环境,也部署了前后端项目,在ecs服务器内存访问也成功,nginx也是启动正常。由于是内网环境不能直接访问ecs,所以配置了slb负载均衡绑定ecs在内网中访问
但是直接访问slb的公网ip显示502 bad gateway问题,首先去排查了nginx和后端服务的问题,发现在ecs内部可以正常访问。所以重点排查了slb的配置问题,因为slb的配置是别人配置好给我们用的。
在这里先说下slb的配置:
图上已经是配置成功且能正常访问ecs时的实例了。
具体配置过程按照提示配置就可以了,但这里着重说下容易混淆的点:
1、配置slb的前端协议端口如果时http的话一般默认80,如果是https请求的话配置443,且需要ssl证书
2、slb绑定的ecs服务器,监听的端口可以设置80也可以设置为其他的,无论设置什么,ecs中nginx监听的端口要与这里的保持一致,如果没有安装nginx就与后端服务监听的端口保持一致,权重按照自己业务需求设置即可
3、slb的健康检查最好开启配置一下,这样方便查看slb是否能正常负载均衡到ecs,配置时一般都默认,修改一下路径即可,如果不修改路径采用默认的/通用匹配也可以,但是在nginx中配置的location通用匹配模块就需要相应的修改一下。比如:
如果不配置路径,用默认的/,那么在nginx的server模块中就需要配置一下:
location / {
return 200;
}
如果配置路径(个人觉得最好自己另配一下路径):
比如slb中健康检查路径:/slb
location =/slb-check {
return 200;
}
这里用的是=精确匹配,用其他的也可以,保证访问到就可以
这里说一下slb的健康检查是根据配置的指定地址,端口号和路径向后端的ecs发起请求,根据获取的返回值来判断健康检查是否有异常。
这样配置成功,如果控制台的slb实例显示健康检查正常说明配置成功,slb已经可以负载均衡到ecs上,在用slb的公网IP访问即可。