如何将来自子域的流量重新路由到服务器上的特定端口?

时间:2018-08-15 16:04:24

标签: amazon-web-services nginx amazon-ec2 dns port

我有一个运行带pm2的2个Web应用程序的AWS EC2实例。服务器的地址配置为test.example.com。 (指向EC2的弹性IP的GoDaddy DNS A记录)应用程序1在端口3000上运行,应用程序2在端口4000上运行。

我想要实现的是:

  1. 所有来自subdomain1的流量都流向在端口3000上运行的应用程序。
  2. 所有来自subdomain2的流量都流向端口4000。

现在这是棘手的部分,最终结果应类似于test.sub1.example.comtest.sub2.example.com。 (我是 subdomaining 的菜鸟,因此可能必须将其配置为我不知道的sub1.test.example.comsub2.test.example.com

我尝试通过在GoDaddy上设置指向特定端口的SRV记录来做到这一点,但这只是行不通。

Service  : _something
Protocol : _http
Name     : sub2
Target   : test.example.com
Priotiry : 0
Weight   : 0
Port     : 4000
TTL      : 1 hour

我也读过此reddit article,但据我所知,它将把所有流向服务器的流量重定向到1个特定端口。如果我有2个不同的EC2实例,每个实例都运行各自的Web应用程序并以这种方式配置,那将不是问题。

其他信息:EC2实例运行Ubuntu 16.04,EC2上的Web服务器为nginx 1.14.0

1 个答案:

答案 0 :(得分:1)

我似乎找到了一个简单的解决方案:

我在GoDaddy的DNS上添加了3个子域:

A: test.example.com            -> <aws-elastic-IP>
A: subdomain1.test.example.com -> <aws-elastic-IP>
A: subdomain2.test.example.com -> <aws-elastic-IP>

然后在nginx的默认配置中,为每个子域添加一个指向正确端口的代理通道

server { # landing page
    server_name  test.example.com;
    index index.html;
    root   /home/user/project-source;
    location / {
        root   /home/user/project-source;
    }
    ...
}

server { # webapp running on port 3000
    server_name subdomain1.test.example.com;
    location / {
        proxy_pass http://localhost:3000;
        ...
    }
    ...
}

server { # webapp running on post 4000
    server_name subsomain2.test.example.com;
    location / {
        proxy_pass http://localhost:4000;
        ...
    }
    ...
}