当前位置: 首页 > 面试题库 >

自动HTTPS连接/使用node.js / express重定向

柯鸿云
2023-03-14
问题内容

我一直在尝试通过正在处理的node.js项目来设置HTTPS。对于该示例,我基本上遵循了node.js文档:

// curl -k https://localhost:8000/
var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

现在,当我做

curl -k https://localhost:8000/

我懂了

hello world

如预期的那样。但是如果我这样做

curl -k http://localhost:8000/

我懂了

curl: (52) Empty reply from server

回想起来,这样做似乎很明显,但是与此同时,最终访问我项目的人不会键入 https ://
yadayada,我希望从点击起就将所有流量都设为https网站。

我如何获得节点(以及Express,因为我正在使用的框架)将所有传入流量传递给https,而不管是否已指定?我还没有找到解决此问题的任何文档。还是只是假设在生产环境中,节点位于它前面的东西(例如nginx)可以处理这种重定向?

这是我第一次涉足Web开发,所以如果这很明显,请原谅我的无知。


问题答案:

瑞安,感谢您为我指明了正确的方向。我用一些代码充实了您的答案(第二段),它可以工作。在这种情况下,这些代码段被放入我的快速应用程序中:

// set up plain http server
var http = express.createServer();

// set up a route to redirect http to https
http.get('*', function(req, res) {  
    res.redirect('https://' + req.headers.host + req.url);

    // Or, if you don't want to automatically detect the domain name from the request header, you can hard code it:
    // res.redirect('https://example.com' + req.url);
})

// have it listen on 8080
http.listen(8080);

https express服务器在3000上侦听ATM。我设置了这些iptables规则,因此节点不必以root身份运行:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3000

总之,这完全符合我的期望。



 类似资料:
  • 下面是我到目前为止的代码: 有人能解释一下在和情况下我该做什么吗?以及如何知道网络已断开并重新连接?

  • 我的连接代码如下所示: 干杯,马尔辛

  • 如何轻松配置嵌入式tomcat服务器,将所有http流量重定向到https?我在弹性负载平衡器后面的ec2实例上运行Spring Boot。我已经配置了ELB来为我处理ssl(这太棒了),它将X-FORWARDED-PROTO头设置为“https”。我想检测什么时候没有设置,并重定向用户,迫使他们使用https,如果他们还没有设置的话。 到目前为止,我已经尝试将以下内容添加到我的applicati

  • 问题内容: 我试图用https运行我的节点服务器。我正在使用express和socket.io。 这是我的https代码: 在我的客户上,其以下内容: 现在我在服务器上收到以下异常: uncaughtException:缺少PFX或证书+私钥。 编辑:现在我越来越 错误的请求 您的浏览器发送了该服务器无法理解的请求。原因:您正在对启用SSL的服务器端口使用纯HTTP。请改用HTTPS方案访问此UR

  • 问题内容: 我正在使用用Node.js和Express编写的应用程序,并且正在尝试使用Stomp.js客户端连接到ActiveMQ服务器。 我可以使用Stomp使应用程序很好地连接到ActiveMQ,但是我无法使系统在连接失败时自动重新连接。似乎仅当连接最初成功后又断开连接时才调用失败函数,尽管如果Node应用程序启动时ActiveMQ已关闭,我确实会看到错误消息,证明已调用失败函数。 有人知道这

  • 问题内容: 我想从一个URL请求重定向到另一个“ POST”请求,如下所示: 但是,我无法重定向到“ / test”页面,因为它是POST请求。 那么,在保持“ / test”请求POST的情况下,如何使重定向工作呢? 问题答案: 你可以这样做: 它将保留send方法。 供参考,307 http代码规范为: 307临时重定向(自HTTP / 1.1起)在这种情况下,应使用另一个URI重复请求,但是