【发布时间】:2012-12-13 17:54:15
【问题描述】:
我目前正在 Rails 中构建多域 cms。由于此内容在下一次更改之前是相同的,因此我想通过静态文件进行缓存。
包含 foo.com 和 baz.com 的一些缓存页面的公共目录(在这两种情况下都是 / 和 /asdf):
public/
assets/
cms.css
sites/
foo.com/
assets/
screen-some-hash.min.css
index.html
asdf/
index.html
baz.com/
assets/
screen-some-hash.min.css
index.html
asdf/
index.html
我想做的是:
将 www 重定向到非 www(有效)
如果请求包含子域(cms、admin 等): 如果路径包含 /assets 则在 public/assets 中提供文件并将过期内容设置为 30d 左右。这里没问题,因为 /assets = public/assets 和 public/ 是乘客根。 其他一切:通过 Rails 处理,无需特殊缓存或任何要求。
对于所有其他请求(意味着没有子域): 如果路径包含 /assets 在 public/sites/$host$request_uri 中提供文件并将过期内容设置为 30d 左右。其他一切:检查 public/sites/$host$request_uri 或回退到 rails 应用程序。
除了 www/non-www 重定向之外,我从未使用过 nginx 条件,并且真的不知道我必须为上述条件做什么。如果可能的话,我不想对缓存的内容使用重定向(即重定向到/sites/foo.com/asdf),而是希望在转到http://foo.com/asdf 时让nginx 直接提供此文件。
进一步:我不想硬编码主机名,因为我想处理未知数量的域。我也不想为此使用多个 Rails 应用程序。
【问题讨论】: