【发布时间】:2017-10-20 18:49:04
【问题描述】:
我目前正在本地开发一个节点服务器,为了访问它,我让服务器在 8080 上侦听,然后在浏览器中转到 localhost:8080。但是,当我将此项目放到互联网上时,端口将如何工作?
【问题讨论】:
-
与本地相同。如果你在本地的 80 端口运行你的服务器,那么它将在 localhost 打开,它将充当互联网上的站点
我目前正在本地开发一个节点服务器,为了访问它,我让服务器在 8080 上侦听,然后在浏览器中转到 localhost:8080。但是,当我将此项目放到互联网上时,端口将如何工作?
【问题讨论】:
一旦你“把它放到互联网上”,它的工作原理就会完全一样。浏览器仍然会向一个端口(最有可能是互联网上的 80 或 443)发出请求,但它可能会通过互联网而不是localhost 访问网络服务器。
如果您想了解如何将节点项目部署到服务器,请查看this guide。基本上你需要在节点前面设置一个代理来处理所有服务器的东西,比如请求和 ssl 证书。
【讨论】:
我假设您的意思是 为您的 node.js 程序提供服务 并通过 将此项目放到互联网上 将您的 localhost 端口代理到互联网。一个简短的回答是,您永远不会在 Internet 上的某个端口上托管您的 API,而是将您的本地端口暴露给 Internet 端口。
我相信你已经知道如何稳定地为 node.js 程序提供服务。如果没有,我真的推荐pm2。
如果您想将您的 API 公开到 Internet,您首先必须为您的本地网络获取一个 IP,以便其他人可以通过该 IP 访问您的网络。您还可以将其与域相关联。然后使用IPfire之类的软件来管理端口映射。例如,您可以将yourIP:8080 映射到IP ofLocalhostAtLocalNetwork:8080。然后,人们可以通过yourIP:8080 访问您的 API。或者您可以简单地将yourIP:80 映射到IPofLocalhostAtLocalNetwork:8080,以便人们可以通过您的 IP 直接访问您的 API。
另一个非常流行的服务器和代理服务工具是nginx。使用 Nginx,您可以轻松地提供一些服务并将任何端口代理到任何服务。
【讨论】:
当您的代码从服务器运行时,您需要访问全局变量“process.env”来动态确定端口号。 The process.env property returns an object containing the user environment.
您可以执行以下操作来动态满足本地和服务器环境:
//set port and ip
app.set("port", process.env.PORT || 8080);
app.set("ip", process.env.IP || "0.0.0.0");
app.listen(app.get("port"), app.get("ip"), function (err) {
if (err) {
console.error(err);
return;
} else {
console.info("cicak is running on port " + app.get("port") + ".");
}
});
【讨论】: