我目前面临将网站流量重定向到 AWS 上不同的独立 EC2 实例的问题。 这是我的情况 我有 2 个不同的 EC2 实例在其上运行 React App,我需要根据最初设置的 Cookie 重定向我的流量。
我读过一些文档,其中写到我需要在另一个 EC2 上创建一个中央服务器,并据此重定向流量。
这是我在网上找到的配置,需要在我的中央 EC2 服务器中的
/etc/nginx/nginx.conf
中设置:
http {
map $cookie_mycookie $frontend{
default reactApp1;
value1 reactApp2;
value2 reactApp3;
# Add more mappings as needed
}
upstream reactApp1{
server IP_of_EC2_Instance1;
}
upstream reactApp2{
server IP_of_EC2_Instance2;
}
upstream reactApp3{
server IP_of_EC2_Instance3;
}
server {
listen 80;
server_name mydomain.com;
location / {
proxy_pass https://$frontend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
在AWS DNS记录上,我还将此中央服务器的IP地址设置为我的域作为A记录,因此当我们进入该域时,它需要检查cookie以重定向到具有相关应用程序(例如reactApp1或)的EC2 ReactApp2 或 ReactApp3 ... .
但是 cookie 也已设置,但我从 Nginx 收到
502 Bad Gateway
错误。
如何将我的流量重定向到不同的 EC2?
提前致谢
既然您使用的是 AW,为什么不使用 Application Load Balancer 而不是“中央服务器”呢?
ALB 将接收所有传入请求,并将请求路由到您的 EC2 实例(负载均衡器术语中的“目标”)。我想将(后续)请求发送到您需要“粘性”的同一目标。
如果我正确理解您的要求,您将需要基于应用程序的粘性:
基于应用程序的粘性使您可以灵活地设置自己的客户目标粘性标准。当您启用基于应用程序的粘性时,负载均衡器将根据所选算法将第一个请求路由到目标组内的目标。目标预计会设置一个自定义应用程序 cookie,该应用程序 cookie 与负载均衡器上配置的 cookie 相匹配,以实现粘性。此自定义 cookie 可以包含应用程序所需的任何 cookie 属性。
请注意,使用负载均衡器意味着额外的成本(与中央服务器实例的数量级应相同),但比中央服务器实例更稳定且易于维护。
希望这有帮助。
额外提示:由于 React 应用程序是“静态”站点,因此将它们托管在 S3 存储桶上要便宜得多,您可能需要对此进行调查;请注意,在这种情况下,负载平衡和粘性不适用,但应该可以使用 CloudFront 和 Lambda@Edge 来选择不同的源(在这种情况下,源与目标类似)。