生产环境中推荐的最佳实践node.js端口是什么?

时间:2019-04-01 01:11:31

标签: node.js google-chrome port

我已经使用端口4000在node.js中创建了一个聊天应用程序。一切正常,但是当我在生产中推出该应用程序时,我发现许多公司网络都阻止了输出端口4000。我考虑使用其他端口更有可能在公司网络上打开,但随后找到了受Chrome浏览器阻止的端口列表:

https://superuser.com/questions/188058/which-ports-are-considered-unsafe-by-chrome

使用端口(例如995)会导致Chrome错误“ ERR_UNSAFE_PORT”

如此看来,node.js服务器允许的唯一端口是80和443?在生产环境中为您的node.js应用程序选择端口的推荐最佳实践是什么?

我的网络服务器已经将端口80和443用于典型的apache网络服务。我是否需要仅为node.js创建专用服务器?

我正在使用以下代码来启动从浏览器到node.js服务器的连接:

var socket = io.connect('https://duplex.example.com:4000');

这是服务器端的代码:

const https = require('https');
const fs = require('fs');
var express = require('express')
  , bodyParser = require('body-parser');
var socket = require('socket.io');
var adminid = '';
var clientlist = new Array();
var port = 4000;

const options = {
    cert: fs.readFileSync('./fullchain.pem'),
    key: fs.readFileSync('./privkey.pem')
};

var app = express();

var server = https.createServer(options, app).listen(port, function(){
  console.log("Express server listening on port " + port);
});

2 个答案:

答案 0 :(得分:0)

443和80分别是https和HTTP流量的主要端口。

其他端口也可以用于WebSockets,但这听起来不像您的用例。

我过去所做的是使用反向代理来区分传入的URL,并在客户端不知道客户端的情况下在我的计算机上内部映射端口。

如果您使用的是任何Linux发行版,则NGINX通常是最简单的选择。

这是有关如何使用nginx为节点应用设置反向代理的博客。

http://thejonarnold.com/configure-sails-js-with-subdomains-on-ubuntu/

本文引用了sailsjs,但没有关于该技术的特定框架。

答案 1 :(得分:0)

大多数人不会将其Node.js服务器直接暴露给互联网,而是使用Apache或Nginx作为前端代理。

  1. 仅将服务器绑定到localhost(或使用防火墙规则仅允许传入的80和443。

    server.listen('localhost', 4000)
    
  2. 配置反向代理。我正在使用Caddy

    example.com {
        root /var/www/example.com
        # et cetera
    }
    duplex.example.com {
        proxy / localhost:4000 {
            websocket
        }
    }
    

    代理websocket时,您需要确保ConnectionUpgrade标头没有丢失,这是我在Caddy的快捷方式中所做的。

    您还可以使用与主站点相同的域,并且仅代理特定路径。

  3. 将客户端socket.io连接到wss://duplex.example.com(在端口443上)。 (我不熟悉socket.io来说明为什么它使用HTTPS URL而不是WSS,但我认为您可以使用它。)