mcdanlj
(Michael K Johnson)
1
我一直在考虑通过配置外部 Nginx(我已经有它用于提供 502 维护页面以及正确归因 IPv6 地址)来减少内存占用较大的 Unicorn 实例,让 Nginx 也负责处理图片请求。这样做的目的是获得将图片迁移到 S3(或兼容的对象存储服务)的大部分好处,同时仍将网站内容保留在自己的服务器上。(这不会将其他网站资源从 Unicorn 中移出,但这些资源在页面间缓存效果很好,因此对 Unicorn 的整体开销要小得多。)
就像将外部 Nginx 指向 /var/discourse/shared 中的 socket 一样,我可以从 /var/discourse/shared/$container/uploads 提供 /uploads 路径的服务。
我在 meta 论坛上没看到有人做过类似的事情,尽管我的搜索能力可能不够强。我是否遗漏了某些会导致此方案不可行或实际效果不佳的原因?
Falco
(Falco)
2
我们已经在容器中使用内部 Nginx 提供图像服务。
mcdanlj
(Michael K Johnson)
3
哦。至少现在,下一个有这种绝妙想法的人搜索时应该能找到了。非常感谢!
Falco
(Falco)
4
如果您想帮助您的独角兽实例,一个真正有效的方法是为您的 Discourse 启用 CDN,因为它可以缓存在独角兽实例上提供的少量资源,例如样式表。
mcdanlj
(Michael K Johnson)
5
我猜在外部 nginx 上启用缓存,在不设置 CDN 的情况下,对加载 unicorn 进程也会有同样的好处。我看到所有 JavaScript 资源都设置了缓存控制头,所以我想试试这个方案……
……嗯,我发现内部 nginx 也已经对非错误请求使用了 proxy_cache,有效期为 7 天:
location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
...
# 注意:x-accel-redirect 不能与 proxy_cache 一起使用
proxy_cache one;
proxy_cache_key "$scheme,$host,$request_uri";
proxy_cache_valid 200 301 302 7d;
proxy_cache_valid any 1m;
proxy_pass http://discourse;
break;
}
在这种情况下,CDN 如何帮助加载 unicorn 进程呢?我看到列表中包含了 stylesheets。