【问题标题】:How can I have multiple node applications on nodejs server?如何在 nodejs 服务器上拥有多个节点应用程序?
【发布时间】:2019-10-29 10:24:00
【问题描述】:

我正在尝试合并两个(或更多)nodejs 应用程序。第一个是登录应用程序,可将您带到仪表板。当您在那里时,您应该会看到另一个专用于您的应用程序,该应用程序在不同的本地 IP 和端口上运行。 因此,对于登录,我正在使用从 Okta 服务器获取用户数据的 Okta express 登录门户。现在这是 pug 中的仪表板

block content
h2.text-center Dashboard
h2.user.profile.profileUrl

.row
.offset-sm-2.col-sm-8
  .jumbotron.text-center.
    Welcome to your dashboard page, #{user.profile.firstName}.
    #{user.profile.profileUrl}.

看起来像这样

dashboard

现在我希望 user.profile.profileURL 在单击控制面板时实际打开,但地址在浏览器中不可见,因此地址将与 xydomain/dashboard 相同 这可能吗?

【问题讨论】:

    标签: node.js express xmlhttprequest node-modules pugixml


    【解决方案1】:

    是的,这是可能的。

    你想要的技术是node js反向代理。您想在同一台机器或不同机器上创建多个服务器,但具有相同的域,但在域扩展后,不同的 url 指向不同的服务器。

    如果同一台本地机器上有多个服务器,请使用不同的端口号!如果不同的机器,使用机器的ip号和它的端口号。确保为端口打开防火墙!

    以下是您入门的参考:https://codeforgeek.com/reverse-proxy-using-expressjs/

    基本理解是创建 3 个不同的服务器。对于同一台机器,使用不同的端口号。

    然后创建一个服务器,并在点击 url 时将其指向不同的服务器。

    在所有服务器上,运行此命令来设置节点:

    npm 初始化 -y

    npm i -S express http-proxy

    这些是所有 4 台服务器的代码。

    例如服务器1:

    var express = require("express");
    var app = express();
    app.get('/app1',function(req,res) {
        res.send("Hello world From Server 1");
    });
    app.listen(3001);
    

    服务器2:

    var express = require("express");
    var app = express();
    app.get('/app2',function(req,res) {
        res.send("Hello world From Server 1");
    });
    app.listen(3002);
    

    服务器3:

    var express = require("express");
    var app = express();
    app.get('/app3',function(req,res) {
        res.send("Hello world From Server 1");
    });
    app.listen(3003);
    

    反向代理服务器:

    var express  = require('express');
    var app      = express();
    var httpProxy = require('http-proxy');
    var apiProxy = httpProxy.createProxyServer();
    var serverOne = 'http://localhost:3001',
        ServerTwo = 'http://localhost:3002',
        ServerThree = 'http://localhost:3003';
    
    app.all("/app1/*", function(req, res) {
        console.log('redirecting to Server1');
        apiProxy.web(req, res, {target: serverOne});
    });
    
    app.all("/app2/*", function(req, res) {
        console.log('redirecting to Server2');
        apiProxy.web(req, res, {target: ServerTwo});
    });
    
    app.all("/app3/*", function(req, res) {
        console.log('redirecting to Server3');
        apiProxy.web(req, res, {target: ServerThree});
    });
    
    app.listen(3000);
    

    现在运行所有 4 台服务器。

    现在转到网址,输入:

    localhost:3000/app1/ 它会转到您的服务器 1

    localhost:3000/app2/ 它会转到你的服务器 2

    localhost:3000/app3/ 它会转到您的服务器 3

    如果您在不同的本地机器上,请将 localhost 更改为 ip 号。

    如果你不喜欢在app1之后使用/,那么你需要配置它。这超出了这个问题的范围。

    祝你好运。

    编辑:我忘了提及,您放入反向代理服务器的原始 pug 文件。它是主页,您在代理服务器中呈现仪表板页面。

    【讨论】:

    • 不,这不是真正的解决方案,我知道反向代理,但是对于每个新服务器,我需要手动将其添加到 server.js 以及用户身份验证问题,用户将能够访问服务器。例如 user1 可以访问 1,2,3,n 服务器,或者每个服务器都需要单独的身份验证。我尝试实现的方式是服务器 lP 存储在 db 或 3rd 方位置,并且该位置是从 dashboard.js 调用的,我可以调用它,但就像图片中的文本或 href 链接一样。我希望在仪表板哈巴狗中加载,有点像 iframe,但不是因为访问将被授权使用 cookie
    • 你的主服务器可以正常运行,如果他们去一个 url 它指向另一个使用 http-proxy 的服务器。身份验证 - 将所有服务器设置为使用相同的身份验证数据库。您还可以将服务器 ip 存储在数据库中,然后当用户登陆主服务器时,它会调用数据库,将数据加载到变量并使用您的服务器 ip 并将其指向您需要的服务器。
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2019-12-19
    相关资源
    最近更新 更多