Node.js Node Express服务器没有';无法正确处理http重定向

Node.js Node Express服务器没有';无法正确处理http重定向,node.js,redirect,express,server,Node.js,Redirect,Express,Server,我正在尝试使用两个Express服务器的组合将用户从http重定向到https,并将带有www的请求重定向到非www,因为cert需要非www。第一个问题是,用户访问他们得到的错误连接被拒绝。第二个问题,用户访问存在DNS错误。用户只能成功访问(并被重定向)和。我尝试了一些解决方案,但Express的许多示例似乎已经过时,需要做哪些更改才能涵盖上述两个用例 // Create Express Server server = express(); httpServer = expres

我正在尝试使用两个Express服务器的组合将用户从http重定向到https,并将带有www的请求重定向到非www,因为cert需要非www。第一个问题是,用户访问他们得到的错误连接被拒绝。第二个问题,用户访问存在DNS错误。用户只能成功访问(并被重定向)和。我尝试了一些解决方案,但Express的许多示例似乎已经过时,需要做哪些更改才能涵盖上述两个用例

  // Create Express Server
  server = express();
  httpServer = express();

  // Redirect http to https
  httpServer.set('port', 80);

  httpServer.get("*", function (req, res, next) {
      res.redirect("https://" + req.headers.host + "/" + req.path);
  });

  http.createServer(httpServer).listen(80);


  server.set('trust proxy', true);

  // Add server static middleware
  server.use( st(options.prod.st) );

  server.use(function (req, res, next) {
    var str = "www.";
    if (req.headers.host.indexOf(str) === 0) {
      res.redirect(301, req.protocol + "://" + req.headers.host.slice(str.length) + req.originalUrl);
    } else {
      next();
    }
  });

  // Fallback to /index.html
  server.use(fallback(prodRoot));

  // Start Server
  https.createServer(creds, server).listen(options.prod.port);

在为www添加NS记录后,大多数问题都得到了解决。谢谢@Fella的建议。更正代码如下。如果用户登陆
https://www.example.com
我需要添加CORS策略,以防止web应用程序中某些XMLHttpRequests出现混合内容警告。我还删除了从www到非www的重定向,只是在修复NS记录后没有必要这样做

 // Create Connect Server
  server = express();
  httpServer = express();

  // Redirect http to https

  httpServer.get('*', function (req, res, next) {
      res.redirect(301, 'https://' + req.headers.host + req.path);
  });

  http.createServer(httpServer).listen(80);

  // Add serve static middleware
  server.use( st(options.prod.st) );

  // Implement CORS policy
  server.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    next();
  });

  // Fallback to /index.html
  server.use(fallback(prodRoot));

  // Start Server
  https.createServer(creds, server).listen(443);

默认的https端口是433,所以你需要监听它。要为www.example.com服务,您应该创建其他ns记录。如果需要从https://www.example.com重定向,则需要通配符cert.options.prod.port=443。我将研究通配符证书和ns记录。好的,添加了www ns记录,现在DNS正在为
http://www.example.com
https://www.example.com
但问题的第二部分仍未解决。
https://www.example.com
不会重定向到
https://example.com
http://www.example.com
不会重定向到
https://example.com
。按照我的理解,我需要做的就是正确设置重定向,而不需要通配符证书。好的,我对请求进行了一些调试。重定向不起作用,因为即使用户访问
https://www.example.com
req.host
=
example.com
www.example.com
。这是否意味着NS记录仍有问题?req.host是当前请求URL的一部分,表示主机名。这里不涉及NS<代码>https://test.example.com主机将是
test.example.com