Cloudfront正在从Nginx缓存404,用于原始服务器上确实存在的资产

埃里克

我一直在为在nginx后面运行的Rails应用程序设置多个Cloudfront端点,以改善页面加载时间。基本上-在此之前,我们已经建立了一个端点,似乎工作正常,但是当我使用以下Asset_host声明添加了第二个端点时:

config.action_controller.asset_host = Proc.new do |source|
    hosts = ["https://url1.cloudfront.net", "https://url2.cloudfront.net"]
    hosts[source.hash % 2]
end

每当我部署(使用漂亮的capistrano部署脚本)时,某些资产就不会加载-cloudfront正在缓存nginx 404页面。如果我使cloudfront的缓存无效,则资产全部可以正常加载。

capistrano脚本本身会在重新启动unicorn之前进行编译,因此不应在html中引用新资产文件名,但cloudfront会在部署后立即缓存404。

我当然不能在每次部署后使Cloudfront缓存失效,这花费了太长时间。有没有人遇到这个问题?有关如何解决此问题的任何建议?

埃里克

我想通了。事实证明,我们的预加载和资产更改监视端点(在资产更改并需要重新加载时向前端报告)正在根据摘要的磁盘列表进行测试以确定这一点。自然地-磁盘摘要可以先于所有机器上实际编译的摘要,从而导致浏览器尝试在实际准备就绪之前获取资产。

对于使用这种技术测试资产变更的其他人-我建议使用存储在以下位置的应用程序中的哈希值:

MyAppNamespace::Application.config.assets.digests

希望这对别人有帮助!

[更新]实际上-问题的真正根源是使用:hash方法确定要提供哪个url-尽管该方法的输出在单个进程中将是一致的-不会跨进程,因此将使用不同的服务器不同的哈希值,并且由于它们都位于平衡器后面,因此并非所有服务器都具有所请求的资产。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

套接字问题,客户端声称连接失败,但是服务器表示确实存在

来自分类Dev

通过Nginx替换指纹文件服务器时,使浏览器中的资产缓存过期

来自分类Dev

服务器上的NGINX Docker与Ubuntu服务器上已存在的NGINX

来自分类Dev

为什么在加载资产时nginx从平均服务器返回404?

来自分类Dev

Ubuntu服务器上的Nginx抛出404错误

来自分类Dev

Chrome中的Nginx服务器缓存

来自分类Dev

如何预热CloudFront边缘服务器的缓存?

来自分类Dev

如何在 Firebase 服务器上上传资产包?谷歌提供服务器上传可用于android/IOS平台游戏的资产包?

来自分类Dev

SQL:确实存在的无效列名称上的错误

来自分类Dev

HttpClient 在服务器上启用缓存

来自分类Dev

在从属服务器上运行powershell命令-Jenkins

来自分类Dev

Jenkins CI插件在从属服务器上运行

来自分类Dev

在从属服务器上运行powershell命令-Jenkins

来自分类Dev

主位置未在从主服务器上更新

来自分类Dev

如何清除Nginx代理服务器上静态文件的缓存

来自分类Dev

网站文件被缓存在运行PHP 5.5.28的Debian网络服务器上

来自分类Dev

chrome已缓存服务器上不再存在的html文件

来自分类Dev

用于NGINX Web服务器的Dockerfile

来自分类Dev

用于NGINX Web服务器的Dockerfile

来自分类Dev

Maxscale正在使用router_options = master(从/主复制)在从属服务器上写入,并且侦听器已停止

来自分类Dev

资产存储在Usergrid服务器上的什么位置?

来自分类Dev

无法在亚马逊服务器上预编译资产

来自分类Dev

是否可以在从服务器原始加载之前显示默认图像?

来自分类Dev

访问服务器上的文件时,Nginx 返回 404 not found

来自分类Dev

ufw delete allow 'Nginx HTTP': 无法删除不存在的规则,但它确实存在

来自分类Dev

如何禁用Nginx + uwsgi + python服务器的缓存?

来自分类Dev

如何禁用Nginx + uwsgi + python服务器的缓存?

来自分类Dev

更改代理缓存密钥 nginx 服务器

来自分类Dev

“不存在没有用于类的args构造函数”,但确实存在

Related 相关文章

  1. 1

    套接字问题,客户端声称连接失败,但是服务器表示确实存在

  2. 2

    通过Nginx替换指纹文件服务器时,使浏览器中的资产缓存过期

  3. 3

    服务器上的NGINX Docker与Ubuntu服务器上已存在的NGINX

  4. 4

    为什么在加载资产时nginx从平均服务器返回404?

  5. 5

    Ubuntu服务器上的Nginx抛出404错误

  6. 6

    Chrome中的Nginx服务器缓存

  7. 7

    如何预热CloudFront边缘服务器的缓存?

  8. 8

    如何在 Firebase 服务器上上传资产包?谷歌提供服务器上传可用于android/IOS平台游戏的资产包?

  9. 9

    SQL:确实存在的无效列名称上的错误

  10. 10

    HttpClient 在服务器上启用缓存

  11. 11

    在从属服务器上运行powershell命令-Jenkins

  12. 12

    Jenkins CI插件在从属服务器上运行

  13. 13

    在从属服务器上运行powershell命令-Jenkins

  14. 14

    主位置未在从主服务器上更新

  15. 15

    如何清除Nginx代理服务器上静态文件的缓存

  16. 16

    网站文件被缓存在运行PHP 5.5.28的Debian网络服务器上

  17. 17

    chrome已缓存服务器上不再存在的html文件

  18. 18

    用于NGINX Web服务器的Dockerfile

  19. 19

    用于NGINX Web服务器的Dockerfile

  20. 20

    Maxscale正在使用router_options = master(从/主复制)在从属服务器上写入,并且侦听器已停止

  21. 21

    资产存储在Usergrid服务器上的什么位置?

  22. 22

    无法在亚马逊服务器上预编译资产

  23. 23

    是否可以在从服务器原始加载之前显示默认图像?

  24. 24

    访问服务器上的文件时,Nginx 返回 404 not found

  25. 25

    ufw delete allow 'Nginx HTTP': 无法删除不存在的规则,但它确实存在

  26. 26

    如何禁用Nginx + uwsgi + python服务器的缓存?

  27. 27

    如何禁用Nginx + uwsgi + python服务器的缓存?

  28. 28

    更改代理缓存密钥 nginx 服务器

  29. 29

    “不存在没有用于类的args构造函数”,但确实存在

热门标签

归档