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

假设我现在有一台服务器A,我给它绑定了好几个二级域名
test.a.com
blog.a.com
react.a.com
fed.a.com
node.a.com

这几个域名都指向这台服务器A,服务器A上面有一个nginx服务,我希望通过 test.a.com 能直接访问 test 项目, blog.a.com 能访问到 blog

就是 nginx 可以用多个域名访问, 但是希望 nginx 能根据二级域名代理到正确的后端服务(也可能是前端静态资源服务)。 通过 path 来区分不太美观,增加了路径层级

阅读 5k
2 个回答

为啥会是 path。

server_name 不是干这个事情的嘛?


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

除了 @linong 提到的配置多个 server_name 以外,如果你这些域名都是同一个根域名的二级域名的话,你还可以尝试一下“泛域名”。好处是如果下面有很多可以复用的配置的话,可以少复制粘贴、管理起来也方便(虽然也可以 includes 公共部分,但分散到多个文件里管理起来更复杂)。

server {
    listen 80;
    server_name ~^(?<subdomain>.+)\.a\.com$; # *.a.com
    
    location / {
        if ($subdomain = 'api') {
            # api.a.com 反向代理转发
            proxy_pass http://upstream_api;
        }

        if ($subdomain = 'www') {
            # www.a.com 静态文件目录
            root /var/www/;
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题