Nginx 服务器块:子域名与路径

Nginx 服务器块:子域名与路径

子域名和位置路径有什么区别
例子:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name xxxx.yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }

}

或者

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }
    location /xxxx/ {

        proxy_pass http://127.0.0.1:4000;

    }

}

显然,分离级别不同,第一个是在 DNS 服务器上分离,第二个请求方向发生在 nginx 本身。我很好奇的是,选择一种解决方案而不是另一种解决方案时需要注意什么。

答案1

如果需要,您可以让 NGINX 响应某个 IP 地址或端口上的所有请求。配置中的子域/域仅限制来自特定“服务器”配置块的响应。

位置有没有什么与域/子域无关,但它们依赖于服务器块中配置的内容。通常对于 NGINX,您首先要配置用于监听的域和 IP,然后完全忘记它。

您的第一个示例设置了xxxx.yyy.com=>http://127.0.0.1:3000

第二个示例设置yyy.com/xxxx=>http://127.0.0.1:4000

您可以将示例 #1 合并到示例 #2 中,方法是将基本域和子域都放入 #2 的服务器块中(如果您不关心两个路径是否都适用于基本域和子域):


server {

    listen 80 default_server;
    listen [::]:80 default_server;

    server_name yyy.com xxxx.yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }

    location /xxxx/ {

        proxy_pass http://127.0.0.1:4000;

    }
}

因此,您可以看到,正如您所说的那样,不存在“DNS 分离”——除非您将这些托管在不同的 IP 地址上。唯一的分离是在路径中。

合并后的示例产生:

xxxx.yyy.com=>http://127.0.0.1:3000

yyy.com=>http://127.0.0.1:3000

yyy.com/xxxx=>http://127.0.0.1:4000

xxxx.yyy.com/xxxx=>http://127.0.0.1:4000

子域名不是路径。它们是完全不同的东西。因此,尝试对它们进行比较和对比表明你的理解已经偏离轨道。

也许您以前在某个地方有过子域,其中有一个目录用于子域,另一个目录用于主域。这些是您的文档根目录,这只是一些基于 Web 的服务器管理工​​具默认配置的方式。除非您(或某些工具或系统管理员)创建子域和路径,否则子域和路径之间没有固有关联。

您可以将任何域或子域(或您在位置块中设置的任何路径)映射到文件系统中的 /any/path/you/want。

位置与路径有关... 再次,在 NGINX 找到与服务器块匹配的请求后,它会监视与 HTTP 请求中的路径匹配的请求。

/thispath /thatpath /foo /bar 或 /foo/bar/on/thatpath 或者您可以使用通配符和正则表达式。您可以配置不同的文件扩展名以从不同的目录提供服务,或者 location 的常见用途是告诉 NGINX 如何处理某些文件类型(如 PHP)。

这里给出了几个示例配置:http://nginx.org/en/docs/beginners_guide.html

如果您觉得这有帮助,请点赞或标记为解决方案。谢谢!

答案2

由于主题是 nginx 配置,如果两个域都指向同一个 IP/服务器,则不存在 dns 级别分离。
区别在于,在哪个域中哪些路径可用/可处理。
您可以配置多个具有相同位置但一个域不同的域。这是 的主要用途server_name

location位置块是 URL 中域名/IP 后面的部分。
http://www.example.com/location/ 您可以在不同的位置块/URL 中提供不同的本地路径。

使用 dns 可以实现的功能与 nginx 配置不同。DNS
循环使负载平衡和高可用性成为可能。
基于地理位置的解析可以更快地交付内容。

这实际上取决于你想要实现什么。

相关内容