包含取决于 server_name 的位置

包含取决于 server_name 的位置

我需要在特定的测试环境中提供一些静态数据。我正在尝试执行以下操作:

server {
    include listen;
    include listen_https;

    server_name myprodserver
    server_name mytestserver

    location / {
        do something here anyway
    }

    if ($server_name = "mytestserver") {
        location /loc/ {
            alias /usr/lib/myroot;
        }
    }
}

我收到一个错误:

nginx:[emerg] mypath 中不允许使用“location”指令……

那么我该如何用其他方式来做呢?

答案1

注意 nginx 指令可以使用或不使用的上下文。您不能在块中使用locationalias指令if。另外,您需要检查$http_host变量而不是$server_name。我看到的唯一不定义第二个块的方法server是定义替代根:

location /loc/ {
    if ($http_host = mytestserver) {
        root /usr/lib/myroot;
    }
}

并将您的静态文件放入/usr/lib/myroot/loc/

或者,您可以重命名myrootloc(反之亦然):

location /loc/ {
    if ($http_host = mytestserver) {
        root /usr/lib;
    }
}

相关内容