子域和位置路径示例有什么区别:
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 本身。我很想知道选择一种解决方案而不是另一种解决方案的注意事项是什么。
由于主题是 nginx 配置,如果两个域都指向同一个 IP/服务器,则没有 dns 级别分离。
不同之处在于,哪些域是可用/处理的路径。
您可以将多个域配置为具有相同位置但一个域不同。这是 的主要用途
server_name
。location
块是域名/IP 之后的 URL 部分。http://www.example.com/location/
您可以在不同的位置块/URL 中提供不同的本地路径。使用 dns 可以实现的功能与 nginx 配置不同。
DNS 循环使负载平衡和高可用性成为可能。
基于地理位置的解析允许更快地交付内容。
这实际上取决于您想要实现的目标。
如果需要,您可以告诉 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 的服务器块中(如果您不关心这两个路径都适用于基域和子域):
因此,您可以看到,正如您所说,没有“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
子域不是路径。它们是完全不同的东西。因此,尝试比较和对比它们表明您的理解偏离了轨道。
也许您在过去的某个地方有一个子域,其中一个目录用于子域,另一个目录用于主域。这些是您的 docroot,这只是一些基于 Web 的服务器管理工具默认配置的方式。子域和路径之间没有内在关联,除非您(或某些工具或系统管理员)创建一个。
您可以将任何域或子域(或您在位置块中设置的任何路径)映射到文件系统中的 /any/path/you/want。
位置是关于 PATHS的......再次在这里,在 NGINX 找到与服务器块匹配的请求之后,它正在监视与 HTTP 请求中的路径匹配的请求。
/thispath /thatpath /foo /bar 或 /foo/bar/on/thatpath 或者您可以使用通配符和正则表达式。您可以配置不同的文件扩展名以从不同的目录提供服务,或者位置的常见用途是告诉 NGINX 如何处理某些文件类型,例如 PHP。
这里给出了几个示例配置:http: //nginx.org/en/docs/beginners_guide.html
如果您觉得这有帮助,请点赞或标记为解决方案。谢谢!