我的网络应用程序在端口3000上运行。如果有人想要访问,他们需要通过http://abcdomain.com:3000/访问。我想在http://abcdomain.com/处访问该应用程序。
我想将默认端口更改为运行我的应用程序的特定端口(3000)
我在linux中更改了DNS,但我无法隐藏URL上的端口号
如何实现这个
答案 0 :(得分:2)
我想将默认端口更改为运行我的应用程序的特定端口(3000)
您无法更改默认端口。这是由浏览器决定的。当浏览器看到没有端口的URL时,它会选择默认端口80(对于http)或443(对于https)并使用该端口。这不是可以从服务器控制的东西。
但是,您可以在服务器上的端口80上发出请求,然后从那里处理它。以下是您的一些选择:
在端口80(默认的http端口)上运行服务器,因此URL中不需要端口号,服务器上也不需要重定向或转发。
使用iptables在Linux服务器上设置自动端口转发,以便传入端口80的请求自动路由到端口3000.这里的one answer显示了如何执行此操作。因此,用户使用带有端口号的URL,该URL将在端口80到达您的服务器,然后服务器中的iptable设置将转发到端口3000。
在Web服务器前使用其他类型的基础架构,例如NGINX代理或负载均衡器,可以将端口80请求转发到服务器正在侦听的端口3000。
仅供参考,我在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);