我尝试使用2台Express服务器的组合将用户从http重定向到https,并将用于www的请求重定向到非www,因为证书需要非www。第一个问题是,用户访问https://www.example.com他们获得了ERR_CONNECTION_REFUSED。第二个问题,用户访问http://www.example.com存在DNS错误。用户只能成功访问http://example.com(并重定向)和https://example.com。我已经尝试了一些解决方案,但很多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);
答案 0 :(得分:0)
为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);