【问题标题】:Set nginx root based on existance of another directory根据另一个目录的存在设置 nginx root
【发布时间】:2015-10-31 10:18:10
【问题描述】:

我正在为用户帐户构建一个使用动态 DNS 的系统,因此您注册一个子域。

我有一些服务器指令来捕获诸如 api 之类的东西。和万维网。和其他特殊情况,我有一个指令可以读取通配符域名并使用它来设置特定于域的资产位置。

server {
  server_name "~^(?<domain>[a-z0-9]+)\.example\.com$";
  root /sites/core;
  location /assets {
    alias /site-assets/$domain;
  }
}

我想要做的是检查资产目录是否存在,并在同一个域中显示不同的站点。

为了澄清,如果上面示例中的资产目录存在,则提供一组文件,否则,提供另一组文件。由于我要服务的网站不在相关目录中,因此我不能使用 try_files 或类似的东西。

我阅读了所有关于使用 if 指令的恐怖故事,但我认为我需要类似的东西

if (-d /site-assets/$domain) {
  ... Do something
}

然后换根,但是不行。

有什么想法可以实现这一点吗?

【问题讨论】:

  • 请详细解释这实际上意味着什么检查资产目录的存在并在同一个域上显示加入页面。?
  • 那条线对我的构建来说非常具体,但不是这个问题。本质上,我正在寻找服务器上是否存在特定目录,如果存在,则提供一组内容,否则,提供另一组内容。但不是该特定目录中的内容,因此 try_files 不适合。
  • 似乎目录存在是业务逻辑的一部分,因为Nginx将根据该规则(真/假)提供特定内容。如果可能,将逻辑从 Web 服务器配置中取出,直到您需要 Lua(独立模块)或 Perl(内置模块)来将业务逻辑保留在 Nginx 配置中。
  • 感谢您的回复。我的目的是提供一个 Angular 应用程序,因此就 Nginx 而言,它都是静态内容。与其将请求传递给 PHP、Python 或其他任何东西,Nginx 可以做到这一点,服务器开销会更少。

标签: nginx rewrite wildcard-subdomain


【解决方案1】:

好的。我想通了。如果有问题,请告诉我。

我在服务器指令中有以下内容

server {
    server_name "~^(?<domain>[a-z0-9]+)\.example\.com$";
    set $site core;
    if (!-d /path/to/assets/$domain) {
        set $site join;
    }

    root /path/to/sites/$site;
}

如果给定域名的资产目录不存在,那么我可以为我的网站提供一个加入页面,该页面可以获取域名并允许用户注册。如果确实存在,则提供主应用程序。

在我看来,这就像 if 指令的简单使用,所以不应该给我带来太多麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多