我目前正在 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),而是我想让 nginx 在访问http://时直接提供这个文件foo.com/asdf。
进一步:我不想硬编码主机名,因为我想处理未知数量的域。我也不想为此使用多个 Rails 应用程序。