子域名和位置路径有什么区别
例子:
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
循环使负载平衡和高可用性成为可能。
基于地理位置的解析可以更快地交付内容。
这实际上取决于你想要实现什么。