Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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
Javascript Node.js中的HTTPS服务器_Javascript_Node.js - Fatal编程技术网

Javascript Node.js中的HTTPS服务器

Javascript Node.js中的HTTPS服务器,javascript,node.js,Javascript,Node.js,我想知道如何在侦听端口443的节点中创建https服务器,以便在键入以下内容时: https://my.ip.address:443 it should work. https://my.ip.address it should work. my.ip.address (without the https://) it should work and redirect me to https) my.ip.address:443 it should work and redirect me to

我想知道如何在侦听端口443的节点中创建https服务器,以便在键入以下内容时:

https://my.ip.address:443 it should work.
https://my.ip.address it should work.
my.ip.address (without the https://) it should work and redirect me to https)
my.ip.address:443 it should work and redirect me to https
到目前为止,我只能使第一个和第二个url工作


所以我的问题是,我如何使它也适用于其他两种可能性(最后两种)。谢谢

如果您在浏览器的地址栏中键入
my.ip.address
,它将请求
http://my.ip.address:80
。要使其与SSL版本配合使用,您需要:

  • 侦听端口80上的HTTP(非HTTPS)
  • 向SSL站点发出301 HTTP重定向

  • 如果您在浏览器中键入
    my.ip.address:443
    ,它将请求
    http://my.ip.address:443
    。这将尝试在不首先设置SSL的情况下发出HTTP请求,并得到一个错误。您对此无能为力。

    如果您在浏览器的地址栏中键入
    my.ip.address
    ,则浏览器将请求
    http://my.ip.address:80
    。要使其与SSL版本配合使用,您需要:

  • 侦听端口80上的HTTP(非HTTPS)
  • 向SSL站点发出301 HTTP重定向

  • 如果您在浏览器中键入
    my.ip.address:443
    ,它将请求
    http://my.ip.address:443
    。这将尝试在不首先设置SSL的情况下发出HTTP请求,并得到一个错误。您对此无能为力。

    您可以从http重定向到https。 通过nginx

    通过expressjs中间件

    大概是这样的:

    app.use(function (request, response, next) {
      if (request.protocol === 'http') {
        response.redirect('https://yourhostname.com' + request.originalUrl);
      } else {
        next();
      }
    });
    

    您可以从http重定向到https。 通过nginx

    通过expressjs中间件

    大概是这样的:

    app.use(function (request, response, next) {
      if (request.protocol === 'http') {
        response.redirect('https://yourhostname.com' + request.originalUrl);
      } else {
        next();
      }
    });
    


    根据经验,永远不要将节点暴露给世界。使用像nginx这样的反向代理。您可以在nginx中完成上述所有操作,即不必公开节点+端口443@SwarajGiri:将node暴露在世界上有什么害处?@SwarajGiri-我很确定你不能用nginx(或其他任何东西)处理最后一个案例。@Quentin-用nginx,你没有端口。它基本上可以归结为
    http
    https
    重定向。不?@Matt-经验法则,永远不要把节点暴露给世界。使用像nginx这样的反向代理。您可以在nginx中完成上述所有操作,即不必公开节点+端口443@SwarajGiri:将node暴露在世界上有什么害处?@SwarajGiri-我很确定你不能用nginx(或其他任何东西)处理最后一个案例。@Quentin-用nginx,你没有端口。它基本上可以归结为
    http
    https
    重定向。“没有?”马特-你的回答其实很有帮助。我现在能够使所有前三个URL工作。你确定对最后一个(my.ip.address:443)我无能为力吗?@JesseJames-可能会编写一些东西,嗅探端口443上的传入数据,并根据得到的信息使用HTTP或SSL进行响应,但对于一个非常奇怪的边缘案例来说,这似乎需要做很多工作。人们没有在URL中显式地输入端口号的习惯,更不用说在不使用该方案的情况下做什么了。我现在能够使所有前三个URL工作。你确定对最后一个(my.ip.address:443)我无能为力吗?@JesseJames-可能会编写一些东西,嗅探端口443上的传入数据,并根据得到的信息使用HTTP或SSL进行响应,但对于一个非常奇怪的边缘案例来说,这似乎需要做很多工作。人们没有在URL中显式地输入端口号的习惯,更不用说不使用该方案就做什么了。答案很好。我已经能做到了。但我现在真正想做的是,当我键入我的.ip.address:443时,使其工作(这应该可以工作,并将我重定向到https://my.ip.address。你是说重定向自
    http://my.ip.address:443
    (是,http)至
    https://my.ip.address:443
    (是,https)?可能您必须将应用程序或nginx绑定到两个端口—80(默认为http)和443(默认为https)绑定两个不同的端口并不能帮助您处理在同一端口上出现的两个不同协议伟大的答案。我已经能够做到这一点。但我现在真正想做的是,在我键入.ip.address:443时使其工作(这应该有效,并将我重定向到https://my.ip.address。你是说从
    http://my.ip.address:443
    (是,http)至
    https://my.ip.address:443
    (是的,https)?您可能必须将应用程序或nginx绑定到两个端口—80(默认为http)和443(默认为https)绑定两个不同的端口无助于处理同一端口上的两个不同协议