节点应用程序的重定向端口[关闭]

Posted

技术标签:

【中文标题】节点应用程序的重定向端口[关闭]【英文标题】:Redirect port for Node Applications [closed] 【发布时间】:2018-06-04 15:42:36 【问题描述】:

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

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

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

如何实现这一点

【问题讨论】:

可能重复...***.com/questions/16573668/… 【参考方案1】:

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

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

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

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

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

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

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


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

// 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);

【讨论】:

我的公司不想使用 option2 。建议我使用 http 重定向。我不确定如何使用 http 重定向? @Jan - 使用 http 重定向需要在端口 80 上运行另一个 Web 服务器,将任何传入请求重定向到端口 3000,然后 :3000 将显示在用户的浏览器中。这是迄今为止最不理想的解决方案。 你能告诉我我该怎么做吗?你有这方面的工作代码吗? @Jan - 您似乎在追求最糟糕和最低效的选择,但我在答案中添加了一个示例。

以上是关于节点应用程序的重定向端口[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题

CakePHP 奇怪的重定向

java web 的重定向问题

复杂的重定向:HTTP 到 HTTPS + localhost 上的端口和裸域到 www,除了 localhost

串行端口重定向或拆分[关闭]

Jersey jax.rs 客户端 2.5 遵循从 HTTP 到 HTTPS 的重定向