DNS魔术从nginx托管同一站点的多个版本?

时间:2016-03-15 17:18:00

标签: nginx dns

我有三个非常相似的静态网站版本,我想从同一个虚拟机上的同一个nginx实例托管(最好)。

让我们说我的网站内容如下:

/opt/mysite/
    flavor1/
        index.html
        ...all content for first flavor/version of the site
    flavor2/
        index.html
        ...all content for second flavor/version of the site
    flavor3/
        index.html
        ...all content for third flavor/version of the site

等。现在让我们假装虚拟机的公共IP为9000.1.2.3(我知道这不是有效的IPv4我只是以此为例)。当我像这样配置nginx时:

http {
    server {
        listen       8080;
        server_name  localhost;
        location / {
            root   /opt/mysite
            index  index.html index.htm;
        }
    }
}

...然后启动nginx,我可以转到9000.1.2.3:8080并查看默认的nginx欢迎屏幕。到目前为止,非常好。

现在我们还假装我已经购买了三个域名:example.comexample.netexample.info。我真正想要的是:

| Domain Name  |     Maps to     |   Which then serves   |
|--------------|:---------------:|:---------------------:|
| example.com  | 9000.1.2.3:8080 | /opt/mysite/flavor1/* |
| example.net  | 9000.1.2.3:9200 | /opt/mysite/flavor2/* |
| example.info | 9000.1.2.3:9300 | /opt/mysite/flavor3/* |

意思是,如果我去,比如http://example.com/fizz,那么最终,9000.1.2.3/opt/mysite/flavor1/fizz就会被归还。但是,如果我请求http://example.info/fizz,那么最终会返回9000.1.2.3/opt/mysite/flavor3/fizz

我个人并不关心实现这一目标需要做些什么:可能是DNS配置,nginx调优,IP转发等等。所以我并不关心我的中间栏目上面的表格(" 地图到"列)。我只需要一种方法来调用这三个域,由在一个VM上运行的同一个nginx实例提供/支持,但为我提供不同版本的站点。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

server { 
    server_name example.com; 
    location / {
        root /var/flavor1;
    } 
} 
server {
    server_name example.net;
    location / { 
        root /var/flavor2; 
    }
}