nginx基于域名(host)路由
在 Nginx 中实现 基于 Host 的路由(即基于域名的转发),通常不是用 location 指令,而是通过 server_name 结合 server 块来做“虚拟主机”的分发。但如果你想在同一个 server 中通过 location 根据 $host 跳转或代理,也可以用 if 或 map 搭配实现。
推荐方案:使用 server_name + 多个 server 实现 Host 路由
1 | # 对应 y.x.com 的请求 |
在一个 server 中做基于 Host 的 location 路由
可以通过 $host 变量配合 if 判断,例:
1 | server { |
⚠️ 注意:使用
if在location中会有副作用,不推荐复杂逻辑。
优雅做法:使用 map 映射 Host 到 backend
1 | map $host $backend { |
这种方式清晰、性能好,而且易于扩展,非常推荐用于较复杂或大量域名场景。