如何在本地开发人员环境中模拟aws cloudfront多个来源

时间:2016-08-16 20:57:50

标签: ajax cors localhost amazon-cloudfront

Cloudfront具有允许不同路径转到不同来源的不错功能。我们使用它来为从S3和AJAX提供服务的纯客户端单页应用程序提供多种服务,简化示例设置为:

  

mydistribution.cloudfront.net / path1 - >负载均衡器服务A

     

mydistribution.cloudfront.net / path2 - >负载均衡器B服务B

     

mydistribution.cloudfront.net/frontend --->承载单页应用JS / CSS / HTML的S3存储桶,它使AJAX调用服务

我正在寻找一种方法来设置本地环境来模仿这部分行为,以便同一个url / port上的不同本地路径可以解析为不同端口上的不同本地运行服务。重要的是,CORS和其他跨域问题(在非本地设置中不存在,因为一切都发生在同一域/端口上)不会影响本地开发。如何最好地实现这一目标?

例如(右侧的所有内容都已设置并在正确的端口上运行)

  

localhost:8080 / path1 - >运行8091的本地Web应用程序服务器

     

localhost:8080 / path2 - >端口8090上的本地Web应用程序服务器

     

localhost:8080 / frontend - >端口8081上的本地节点服务器服务   HTML / JS / CSS

1 个答案:

答案 0 :(得分:2)

您正在寻找的是反向代理。 nginx非常适合这个。它相信它实际上是CloudFront所使用的内容(尽管你也可以用Apache实现相同的功能)。他们解释了如何设置一些基本的反向代理方案:https://www.nginx.com/resources/admin-guide/reverse-proxy/

对于你可以用NGINX做的事情,这真的是冰山一角。您可以完全控制入站和出站标头。这是一个非常强大的平台。

查看一些nginx配置示例:

location /path1/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:8091;
}

location /path2/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:8090;
}

location /frontend/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:8081;
}