我有 Apache 和一些网站的 chroot 环境。
在 chroot 之外,我有 nginx,它将请求转发到 Apache。
但是,我希望 nginx 能够更快地为某些目录提供服务,因此我这样做了:
location ^~ /uploads/ {
alias /VM.01/sites/domain.com/uploads/;
expires 90d;
}
这工作正常,但在/uploads
文件夹里面有一个相对于 chroot 的符号链接,类似于/sites/images
。
当 nginx 请求此文件时,符号链接不再起作用。
不幸的是,我们无法更改符号链接,因为它是由第三方软件完成的。
我能想到两种解决方法,但我都不喜欢。
在 chroot 中安装 nginx。然后“外部”nginx 转发到“chroot”nginx,然后如果需要,请求将转发到“chroot”Apache。
这太复杂了,数据要经过 3 个“层”。(我知道我可以做 2 层)在 chroot 之外创建一个符号链接“/sites/”。
这会破坏封装,而且如果有第二个 chroot 需要相同的目录怎么办。
目前我正在使用选项 2
答案1
为什么不location
为该符号链接添加另一个块,例如
location ^~ /uploads/ {
alias /VM.01/sites/domain.com/uploads/;
expires 90d;
}
location ^~ /uploads/symlink/ {
alias /VM.01/sites/images/;
expires 90d;
}
或者您可以使用嵌套位置来继承外部位置参数:
location ^~ /uploads/ {
alias /VM.01/sites/domain.com/uploads/;
expires 90d;
location ^~ /uploads/symlink/ {
alias /VM.01/sites/images/;
}
}
此外,当location
匹配指令值的最后一部分时alias
,nginx 文档建议改用该root
指令:
location ^~ /uploads/ {
root /VM.01/sites/domain.com;
expires 90d;
location ^~ /uploads/symlink/ {
alias /VM.01/sites/images/;
}
}