node.js - 迁移到 CloudFlare 后,Chrome 中出现无效重定向错误
问题描述
我的网站 www.exampartner.in 在 EC2 实例上运行,该实例使用 NodeJS 连接到我在 bigrock.in 上购买的域。为了使用 SSL,我迁移到了 CloudFlare,但是自从我迁移到 CloudFlare 后,我的网站就出现了问题。主要问题是在将 https 重定向设置为页面规则后,我在 javascript、徽标和 ham pic 上遇到了无效重定向错误。然后我禁用它并尝试通过 HTTP 加载这些资源,但它仍然失败。现在我也禁用了 SSL,页面似乎可以正常工作。我附上了截图供参考。请帮忙。谢谢你。这是我的 routes.js:
var express = require('express');
var router = express.Router();
var passport = require('passport');
router.get('/login', function (req, res, next) {
res.render('login', { message: req.flash('loginMessage'), user: req.user });
});
router.get('/', function (req, res) {
res.render('mainpage', { user: req.user });
});
router.get('/signup', function (req, res, next) {
res.render('signup', { message: req.flash('signupMessage'), user: req.user });
});
// process the login form
router.post('/login', passport.authenticate('local-login', {
successRedirect: '/profile', // redirect to the secure profile section
failureRedirect: '/login', // redirect back to the signup page if there is an error
failureFlash: true // allow flash messages
}));
// app.post('/signup', do all our passport stuff here);
router.post('/signup', passport.authenticate('local-signup', {
successRedirect: '/profile', // redirect to the secure profile section
failureRedirect: '/signup', // redirect back to the signup page if there is an error
failureFlash: true // allow flash messages
}));
// =====================================
// PROFILE SECTION =====================
// =====================================
// we will want this protected so you have to be logged in to visit
// we will use route middleware to verify this (the isLoggedIn function)
router.get('/profile', isLoggedIn, function (req, res) {
res.render('profile', {
user: req.user // get the user out of session and pass to template
});
});
// =====================================
// LOGOUT ==============================
// =====================================
router.get('/logout', function (req, res) {
req.logout();
res.redirect('/');
});
// };
// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated())
return next();
// if they aren't logged redirect them to the home page
res.redirect('/');
}
router.post('/login', passport.authenticate('local-login', {
successRedirect: '/profile', // redirect to the secure profile section
failureRedirect: '/login', // redirect back to the signup page if there is an error
failureFlash: true // allow flash messages
}));
router.get('/bitsat', function (req, res) {
res.render('bitsat', { user: req.user });
})
router.get('/aieee', function (req, res) {
res.render('aieee', { user: req.user });
})
router.get('/ip', function (req, res) {
res.render('ip', { user: req.user });
})
router.get('/jeemain', function (req, res) {
res.render('jeemain', { user: req.user });
})
router.get('/jeeadvanced', function (req, res) {
res.render('jeeadvanced', { user: req.user });
})
router.get('/jeemain/:year', function (req, res) {
res.render(__dirname + '/views/jee_main/' + req.params.year, { user: req.user });
});
router.get('/jeemain/:year/:paper', function (req, res) {
var filename = req.params.paper.substr(0, 2) + 'April' + req.params.year
var mor = req.params.paper.indexOf('Morning')
var eve = req.params.paper.indexOf('Evening')
if (mor !== -1) {
filename = filename + req.params.paper.substr(mor, req.params.paper.length)
}
if (eve !== -1) {
filename = filename + req.params.paper.substr(eve, req.params.paper.length);
}
res.download(__dirname + '/downloads/jee_main/' + req.params.year + '/' + filename + '.pdf')
});
router.get('/bitsat/:op', function (req, res) {
res.render(__dirname + '/views/bitsat/' + req.params.op, { user: req.user });
});
router.get('/bitsat/:op/:year', function (req, res) {
res.download(__dirname + '/downloads/bitsat/' + req.params.op + '/' + req.params.year + '.pdf')
});
module.exports = router;
解决方案
编辑:为了使用 Cloudflare 的严格 SSL,您需要在服务器上安装 SSL 证书。Lets Encrypt提供免费的 SSL 证书,必须每 90 天更新一次。如果这个过程看起来很困难,您可以使用零 SSL,这使得从 let encrypt 获取证书以及更新现有证书变得容易。
您必须设置 express 来处理 https 请求/响应。Node.js 应用程序需要 ssl 证书和密钥。
const express = require('express')
const fs = require('fs')
const https = require('https')
const app = express()
https.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.cert')
}, app)
.listen(process.env.PORT || 3000, function () {
console.log('"App Listening at port:" + port')
})
推荐阅读
- hyperlink - 如何创建链接以使其“写入特定的 Gmail”?
- javascript - 将属性分配给可以在 QML 组件内定义的可能组件
- python - 'int' 对象不可下标。元组错误
- python - 关闭在另一个线程中启动的 pyqt gui 时如何修复“QObject::~QObject: 计时器不能从另一个线程停止”
- google-sheets - 如何保持带有超链接的文本格式?
- python - 从列表转换逻辑运算符
- .htaccess - 如何拒绝对目录的所有访问并重定向 403?
- python - 通过对附加数据进行训练来改进 BERT
- python-3.x - 使用 PyCharm 在 Python shell 中运行脚本时出现问题
- c - Socket Programming in C, server code with an error