80 -> 3000
和8080 -> 3000
。然后在/
要求:我有两个服务器要与实例x通信。服务器1希望将http请求发送到x / abc和服务器2 想要将http请求发送到x / zyx。
如何配置LB路由到特定页面,例如x / abc和x / zyx? 还是以其他方式编写我的请求?
代码1:服务器1要向x / abc发出http请求
// url is the DNS of load balancer... this should go to x/abc(?)
request({
url: "LoadBalancer-11122232.us-west-2.elb.amazonaws.com:80",
method: "POST",
json: true,
body: tweetJSON
}
代码2:服务器2希望向x / zyx发出http请求
// url is the DNS of load balancer... this should go to x/abc
// DO I EVEN NEED TWO DIFFERENT PORT LISTENERS(?)
request({
url: "LoadBalancer-11122232.us-west-2.elb.amazonaws.com:8080",
method: "POST",
json: true,
body: tweetJSON
}
答案 0 :(得分:2)
您没有将负载均衡器配置为将请求路由到不同的端点,这更像是反向代理的工作,例如Nginx。
Load Balancer提供了一个要呼叫的端点,并将来自客户端的请求转发到许多相同的服务器之一。目的是在许多服务器之间共享高负载。
在您所处的环境中,您仍然可以使用负载均衡器,但就路由而言,我建议您完整寻址URL:
代码1:服务器1要向x / abc发出http请求
// url is the DNS of load balancer plus the route (/abc)
request({
url: "https://LoadBalancer-11122232.us-west-2.elb.amazonaws.com/abc",
method: "POST",
json: true,
body: tweetJSON
}
代码2:服务器2希望向x / zyx发出http请求
// url is the DNS of load balancer plus the route (/zyx)
request({
url: "https://LoadBalancer-11122232.us-west-2.elb.amazonaws.com/zyx",
method: "POST",
json: true,
body: tweetJSON
}
如果您需要阻止客户端访问后端URL,则需要某种形式的身份验证来标识服务器2。
答案 1 :(得分:0)
通常,您使用负载平衡器来平衡两个节点服务器之间的流量。
因此,您有两个非常简单的选项。一种是代替经典的Amazon负载均衡器(ELB),而可以切换到ALB(应用程序负载均衡器)。
要进行设置,请遵循these Amazon instructions。
特别注意最后一部分:
在“侦听器”选项卡上,使用箭头查看规则。 侦听器,然后选择添加规则。指定规则,如下所示:
对于目标组名称,选择您要使用的第二个目标组 已创建。
对于路径模式,请指定要用于基于路径的确切模式 路由(例如/ img / *)。
有关更多信息,请see Listener Rules.
一个更便宜的选择是使用Nginx来滚动您自己的负载均衡器。您可以使用配置了Nginx的AMI启动EC2实例。
然后,您将编辑Nginx配置,如下所示:
# The Node.js application serving ABC
upstream node_abc {
server ip.address.node.instance1:3000;
}
# The Node.js application serving XYZ
upstream node_xyz {
server ip.address.node.instance2:3000;
}
# Accept connections from clients
server {
listen 80;
charset utf-8;
location /abc {
proxy_pass http://node_abc;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_set_header X-Forwarded-Proto $scheme;
}
location /xyz {
proxy_set_header X-Forwarded-Proto $scheme;
}
}
尽管更好,而且我认为您真正想要的是使用nginx作为适当的负载平衡反向代理。为此,您将运行同一node.js应用程序的两个副本,其中每个副本都可以响应路由/ abc或/ xyz,并为页面提供服务器。然后使用如下配置:
#Proper Load Balanced Nginx setup
upstream node_server {
server ip.address.node.instance1:3000;
server ip.address.node.instance2:3000;
}
# Accept connections from clients
server {
listen 80;
charset utf-8;
location / {
proxy_pass http://node_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_set_header X-Forwarded-Proto $scheme;
}
如果您执行此最后的配置,则不必担心页面上的任何复杂的URL重写。
您可以在单独的服务器上获得两个单独的节点实例的好处。因此,如果您的一个节点实例发生故障,那么您的负载均衡器将使用另一个节点实例。 (将/ _health路由添加到响应200 OK的nodejs应用)
您可以轻松地进行A / B测试,并且蓝绿色部署在其中您仅使用新代码更新一个实例,然后再更新另一个实例。
可以将Nginx配置为不同的负载平衡策略,默认为轮询。如果需要在用户开始会话后将他们发送到同一节点实例,则还可以添加粘性会话。