多个域名指向一个nginx如何区分请求来自哪个域名?

思否 问答 已采纳 👍 2 含 AI 优化版

问题

多个域名指向一个nginx如何区分请求来自哪个域名?

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

多个域名都指向同一台 Nginx 服务器,如何在 Nginx 配置层面区分请求具体来自哪个域名,并分别处理?

涉及技术

Nginx、虚拟主机(Server Block)、server_name

期望结果

得到通过域名区分请求并分别配置的方案,而不是误以为要靠 URL 路径来区分。

回答

原始回答

2021-12-02 为啥会是 path。server_name 不是干这个事情的嘛?server {

listen 80;

server_name test1.linong.dev;

}

server {

listen 80;

server_name test2.linong.dev;

}

AI 优化 · 回答整理

解答思路

区分不同域名的请求本来就是 Nginx server_name 指令的职责,不需要(也不应该)通过 URL 路径来区分——只要为每个域名单独配置一个 server {} 块即可,Nginx 会根据请求头中的 Host 自动匹配对应的 server_name,路由到相应的配置块。

示例代码

server {
  listen       80;
  server_name  test1.linong.dev;

  location / {
    proxy_pass http://backend1;
  }
}

server {
  listen       80;
  server_name  test2.linong.dev;

  location / {
    proxy_pass http://backend2;
  }
}

详细说明

  • Nginx 在同一个 listen 端口上可以配置多个 server {} 块,每个块通过 server_name 声明自己负责哪个域名。
  • 当请求到达时,Nginx 会读取 HTTP 请求头中的 Host 字段,与各个 server_name 做匹配,命中哪个块就用哪个块的配置(locationproxy_pass、根目录等)处理请求。
  • 因此不需要在应用层通过 path 前缀去区分域名——让每个域名各自拥有独立、清晰的配置块,也更方便维护。

小结

多域名共用一台 Nginx 时,直接为每个域名建一个 server {} 块,用 server_name 区分即可,不需要借助 URL 路径来实现域名区分。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。