如何在同一个域中托管我的API和Web应用程序?

时间:2016-06-05 22:34:50

标签: ruby-on-rails api express server hosting

我有一个Rails API和一个Web应用程序(使用express),完全独立且彼此独立。我想知道的是,我是否必须单独部署它们?如果我这样做,我该怎么做才能让我的api在mysite.com/apimysite.com/中的网络应用

我已经看过许多项目都是这样做的,甚至将api和应用程序放在单独的回购中。

2 个答案:

答案 0 :(得分:7)

通常,您不会将此类Web应用程序直接暴露给客户端。而是使用代理服务器,将所有传入请求转发到节点或rails服务器。

nginx是一个受欢迎的选择。 beginners guide甚至包含了与您尝试做的非常相似的示例。

您可以通过类似于此的配置实现您想要的目标:

server {
    location /api/ {
        proxy_pass http://localhost:8000;
    }

    location / {
        proxy_pass http://localhost:3000;
    }
}

这假设您的API在端口8000上本地运行,而您的快速应用程序在端口3000上运行。此外,这不是完整的配置文件 - 这需要加载或添加到http块。从发行版的默认配置开始。

当有多个位置条目时,nginx会选择最具体的位置条目。您甚至可以添加更多条目,例如提供静态内容。

答案 1 :(得分:4)

虽然对于给出的问题,Svens的答案是完全正确的。我更喜欢在DNS级别执行此操作,以便我可以将服务器更改为新位置,以防我的API或Web App遇到高负载。这有助于我们在不影响WebApp的情况下运行API,反之亦然

DNS结构

api.mysite.com => 9.9.9.9
mysite.com = > 9.9.9.9

由于您现在希望WebApp和API都在同一台服务器上运行,因此您可以使用nginx正确转发请求。

server {
    listen       80;
    server_name api.mysite.com;
    # ..
    # Removed for simplicity
    # ..
    location / {
        proxy_pass http://localhost:3000;
    }
}
server {
    listen      80;
    server_name www.mysite.com;
    # ..
    # Removed for simplicity
    # ..
    location / {
        proxy_pass http://localhost:8000;
    }
}

如果您遇到压倒性的流量,将来的任何时候都可以改变DNS以指向新的服务器并且您会很好。