仅使用nginx为特定域提供站点服务

仅使用nginx为特定域提供站点服务,nginx,Nginx,我有一个域名(比如:example.com),我为其设置了如下DNS记录: *.example.com A IP_ADDRESS example.com A IP_ADDRESS www.example.com CNAME example.com server { server_name demo.example.com; // Location blocks here } 这意味着此域(包括子域)的所有请求都将路由到地址为IP\ U的“我的服务器” 在

我有一个域名(比如:example.com),我为其设置了如下DNS记录:

*.example.com   A   IP_ADDRESS
example.com     A   IP_ADDRESS
www.example.com CNAME example.com
server {
    server_name demo.example.com;

    // Location blocks here
}
这意味着此域(包括子域)的所有请求都将路由到地址为IP\ U的“我的服务器”

在我的服务器上,我有一个正在运行的nginx http服务器,服务器设置如下:

*.example.com   A   IP_ADDRESS
example.com     A   IP_ADDRESS
www.example.com CNAME example.com
server {
    server_name demo.example.com;

    // Location blocks here
}
我所期望的行为是,该站点仅在demo.example.com上显示,而转到anywhere.example.com或example.com将导致nginx给出错误

但事实并非如此,我实际看到的是,虽然我将我的服务器名特别设置为demo.example.com,但该域每个子域上的所有请求都将路由到此站点。所以去anywhere.example.com会看到我只想在去demo.example.com时展示的网站

所以,我怀疑我在这里是愚蠢的,我误解了一些东西,但是有人能告诉我如何得到我想要的吗?

你应该读一读

您需要定义catch-all服务器块,以便带有主机头而不是
demo.example.com
的请求最终到达该服务器

server {
    listen 80 default_server;
    return 404;
    # or return 444;
}

您应该添加第二个默认站点,默认为servername。您可以在那里安装任何错误页面。

是的,仅在发布我在serverfault上实际发现的错误后几分钟。定义一个只返回404错误的服务器块为我修复了它。