如何使用不同“基础”的符号链接(nginx)

如何使用不同“基础”的符号链接(nginx)

我有 Apache 和一些网站的 chroot 环境。

在 chroot 之外,我有 nginx,它将请求转发到 Apache。

但是,我希望 nginx 能够更快地为某些目录提供服务,因此我这样做了:

location ^~ /uploads/ {
    alias   /VM.01/sites/domain.com/uploads/;

    expires 90d;
}

这工作正常,但在/uploads文件夹里面有一个相对于 chroot 的符号链接,类似于/sites/images

当 nginx 请求此文件时,符号链接不再起作用。

不幸的是,我们无法更改符号链接,因为它是由第三方软件完成的。

我能想到两种解决方法,但我都不喜欢。

  1. 在 chroot 中安装 nginx。然后“外部”nginx 转发到“chroot”nginx,然后如果需要,请求将转发到“chroot”Apache。
    这太复杂了,数据要经过 3 个“层”。(我知道我可以做 2 层)

  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/;
    }
}

相关内容