节点应用程序的重定向端口

时间:2017-12-21 22:58:50

标签: node.js linux angular web host

我的网络应用程序在端口3000上运行。如果有人想要访问,他们需要通过http://abcdomain.com:3000/访问。我想在http://abcdomain.com/处访问该应用程序。

我想将默认端口更改为运行我的应用程序的特定端口(3000)

我在linux中更改了DNS,但我无法隐藏URL上的端口号

如何实现这个

1 个答案:

答案 0 :(得分:2)

  

我想将默认端口更改为运行我的应用程序的特定端口(3000)

您无法更改默认端口。这是由浏览器决定的。当浏览器看到没有端口的URL时,它会选择默认端口80(对​​于http)或443(对于https)并使用该端口。这不是可以从服务器控制的东西。

但是,您可以在服务器上的端口80上发出请求,然后从那里处理它。以下是您的一些选择:

  1. 在端口80(默认的http端口)上运行服务器,因此URL中不需要端口号,服务器上也不需要重定向或转发。

  2. 使用iptables在Linux服务器上设置自动端口转发,以便传入端口80的请求自动路由到端口3000.这里的one answer显示了如何执行此操作。因此,用户使用带有端口号的URL,该URL将在端口80到达您的服务器,然后服务器中的iptable设置将转发到端口3000。

  3. 在Web服务器前使用其他类型的基础架构,例如NGINX代理或负载均衡器,可以将端口80请求转发到服务器正在侦听的端口3000。

  4. 仅供参考,我在Raspberry Pi Linux node.js服务器上使用选项2,因为在更高的端口号上运行,让我在没有提升权限的情况下运行我的服务器(这有利于安全性),但iptable端口转发允许用户访问没有端口号的服务器。

    重定向服务器(就像你在评论中要求的那样)似乎是最糟糕的选择,但你可以像这样实现它:

    // set up plain express server
    const app = require('express')();
    
    // set up route to redirect all routes to port 3000
    // note this only works for GET requests, things like POST from your code or forms 
    //   must specify the proper port 3000
    app.get('*', function(req, res) {  
        res.redirect('http:3000//' + req.headers.host + req.url);
    });
    
    // have it listen on 80
    app.listen(80);