Nginx 子域名和重写规则

Nginx 子域名和重写规则

我一直在尝试配置 Nginx 来执行我目前在 Apache 中设置的操作,但到目前为止还没有成功。

我希望 http://$1.$2.mas.example.com(其中 $1 和 $2 是任意子域)指向根目录,其值为 /home/webcontent/$1/mas/$2/html

关于如何实现这一点有什么建议吗?

答案1

这是一个简单的方法。不是你如何布局,而是使用整个主机名作为目录。我会深入研究 nginx 是否可以满足你的要求。我知道它可以做到这一点

server {
    listen       80;
    server_name  _;

    location / {
        root   /tmp/$host;
        index  index.html index.htm;
    }
}

如果你点击http://host1.domain.com在 /tmp/host1.domain.com/index.html

编辑

以下是您要执行的操作

server {
    listen       80;
    server_name  _;

    if ($host ~ (.*)\.(.*)\.domain.com) {
            set $myroot /tmp/$1/mas/$2;
    }

    location / {
        root $myroot;
        index  index.html index.htm;
    }
}

答案2

从 nginx 0.7.40 开始,您可以使用正则表达式服务器名称。

因此以下方法可能有效(未经测试):

server {
  listen 80;
  server_name ~^(\w+)\.(\w+)\.mas\.example\.com$
  root /home/webcontent/$1/mas/$2/html
}

http://nginx.org/en/docs/http/server_names.html#regex_names

相关内容