Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用express在node.js中使用相同的端口号运行http和https服务器?_Node.js - Fatal编程技术网

是否可以使用express在node.js中使用相同的端口号运行http和https服务器?

是否可以使用express在node.js中使用相同的端口号运行http和https服务器?,node.js,Node.js,我有两个服务器HTTP和带密钥的HTTPS。一旦我通过身份验证,我需要在同一端口将HTTP更改为HTTPS var httpsoptions={ key:fs.readFileSync('./keys/twc-key.pem'), cert:fs.readFileSync('./keys/twc-cert.pem') }; var webServer = express(); var websecure = express(httpoptions); 在这里,我需要为Http和H

我有两个服务器HTTP和带密钥的HTTPS。一旦我通过身份验证,我需要在同一端口将HTTP更改为HTTPS

var httpsoptions={
key:fs.readFileSync('./keys/twc-key.pem'),
cert:fs.readFileSync('./keys/twc-cert.pem')
};

var webServer = express();    
var websecure = express(httpoptions);  
在这里,我需要为Http和Https维护相同的端口,这怎么可能呢

使用Nginx作为反向代理 您可以在nginx上启用HTTPs,并通过nginx代理您的节点应用程序。 使用express vhost中间件 在子域上使用express vhost和主机https 如。https://secure.url.com 或https://login.url.com 使用端口443 更容易! 443基本上被所有浏览器接受为https的默认端口。有人说它不受欢迎,但我没有看到任何东西支持这种说法。 443仍然被接受为https的默认端口。 通过https托管所有内容 许多网站已经做到了这一点 防止会话劫持 防止令牌劫持 防止MITM攻击 即使您只是安全地登录,之后您的cookie也会以明文形式出现在http头中。攻击者可以窃取会话cookie并劫持用户会话。
为什么在同一个端口?HTTP应该在80上运行,HTTPS应该在443上运行。我认为不可能在同一个端口上同时运行这两个端口。当然是同一个地址,而不是端口?在同一地址和端口上提供两个不同的协议听起来像是不可能的。在相同的地址上提供服务,例如在80和443上提供HTTP和HTTPS,在apache中可以很容易地直接在主服务器或vhost中配置,而且将node.js服务器放在apache后面可能是个好主意。在nginx后面提供节点最有意义,因为它使用相同的库来处理异步流libuv。Nginx也更轻、速度更快。Apache仍然很棒,但node不会使用Apache提供的附加功能,因此会添加不必要的批量。为正确的工作使用正确的工具。谢谢你的回答。我的问题是,**res.redirect**是必须的还是不必须的?是否可以从http自动重定向到https url?当验证凭据时。这如何回答最初的问题,我必须承认,这个问题的表述很糟糕?我假设您只是在同一个应用程序中实现http和https。这是完全可能的,但是如果没有vhost,您无法在同一端口上托管2台服务器,这意味着您必须为https使用单独的域或子域,许多站点都这样做请参见我的示例。您也可以在443上托管,因为浏览器在这里查找https。这些解决方案只有在无法实现反向代理或前端服务器的情况下才实用,因为节点最好用在像nginx这样的代理后面。如果您想将http会话更改为https,则无法在节点中进行。如果这不能回答您的问题,请提供更多详细信息,说明您试图完成的操作。您好,谢谢您的回答。.我想在使用凭据登录后自动将http更改为https。您能详细解释一下吗。res.redirect是否必须?老实说,与大多数处理器AMD,英特尔和ARM6及以上。拥有专用的加密指令集。动态加密和解密是openSSL和大多数SSL库非常优化的因素。如果您担心额外的资源,那么对于大小为256bit的像样密钥,处理压力非常小。您最好只使用HTTPS。