多个域名指向一个nginx如何区分请求来自哪个域名?
思否 问答 已采纳 👍 2 含 AI 优化版
问题
多个域名指向一个nginx如何区分请求来自哪个域名?
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
多个域名都指向同一台 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做匹配,命中哪个块就用哪个块的配置(location、proxy_pass、根目录等)处理请求。 - 因此不需要在应用层通过 path 前缀去区分域名——让每个域名各自拥有独立、清晰的配置块,也更方便维护。
小结
多域名共用一台 Nginx 时,直接为每个域名建一个 server {} 块,用 server_name 区分即可,不需要借助 URL 路径来实现域名区分。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault