【问题标题】:Deploying CloudFront in front of NodeJS Express在 NodeJS Express 前面部署 CloudFront
【发布时间】:2018-03-20 19:40:43
【问题描述】:

我有一个应用程序,它提供动态 html 和一些用 NodeJS/Express 编写的静态文件。

我在它前面部署了一个 AWS CloudFront 发行版,但是只有 HTML 会通过,所有静态文件都会导致 404。请求的标头如下所示:

Age:116 Connection:keep-alive Content-Length:170 Content-Security-Policy:default-src 'self' Content-Type:text/html; charset=utf-8 Date:Mon, 09 Oct 2017 14:37:23 GMT Server:nginx/1.6.2 Via:1.1 523db8f46d98334ac6b5debbf315e15b.cloudfront.net (CloudFront), 1.1 proxy1.xxx.yy (squid/4.0.17) X-Amz-Cf-Id:5UYpluGn8TxUxsxmmDYYiZnjbOWbZ7iFFit55mmgcN6IbAJHCEAX6Q== X-Cache:MISS from proxy1.xxx.yy X-Cache:Error from cloudfront X-Cache-Lookup:MISS from proxy1.xxx.yy:3128 X-Content-Type-Options:nosniff X-Powered-By:Express

关于信息,我的 nodejs 应用程序在某个端口上运行,并且 nginx 将其反向代理到我使用 proxy_pass 指定的域。

如您所见,我在另一个代理后面,但这不是问题。

我相信正在发生的事情是我的来源看起来像 mydomain.com/path/app_id 并且 express 提供来自 mydomain.com/ 的静态文件。

有没有人在 NodeJS/Express 前面为静态文件成功部署了 CloudFront?我真的不明白这是什么问题..

谢谢!

【问题讨论】:

  • 我尝试添加两个来源 mydomain/path/app_id 和 mydomain 但没有任何区别
  • 查看您的服务器日志以查看实际请求的内容。此外,在测试时将Error Caching Minimum TTL 设置为 0。否则,CloudFront 默认将错误响应缓存 5 分钟。如上,Age: 116 差不多有 2 分钟了,如果你现在解决了这个问题,你就不会看到它,也不会有源服务器日志条目。

标签: node.js express caching amazon-cloudfront


【解决方案1】:

要从另一个路径提供文件,流程如下:

  • 添加所有必要的来源(在本例中为mydomain.com/path/app_id AND mydomain.com(不带尾随/))
  • 为每个文件类型在您的分发中添加行为。在这种情况下,静态文件存储在不同的文件夹中(如/img)。因此我们可以为img/*、js/* 和css/* 添加行为。然后可以将每个行为设置为单个原点。在这种情况下,我们选择 mydomain.com,它之前被命名为 Static files origin。

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 2018-12-02
    • 2020-12-12
    • 2019-04-09
    • 1970-01-01
    • 2015-01-24
    • 2016-12-20
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多