将http重定向到https express.js [英] Redirect http to https express.js
问题描述
我正在尝试在我的快速应用程序中将 http(80)
重新路由到 https(443)
。我正在使用一些中间件来做到这一点。如果我去我的 https://my-example-domain.com
,一切都很好。但是如果我去 http://my-example-domain.com
,它不会重定向,没有任何显示。
我还在我的ubuntu服务器上设置了一些iptables
sudo iptables -A INPUT -i eth0 -p tcp - dport 80 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
函数requireHTTPS(req,res,next){
if(!req.secure){
return res.redirect('https://'+ req.headers.host + req.url);
}
next();
}
//所有环境
app.set('port',process.env.PORT || 8443);
app.set('views',path.join(__ dirname,'views'));
app.set('view engine','jade');
app.use(express.logger('dev'));
app.use(requireHTTPS); // redirect to https
app.use(express.json());
app.use(express.urlencoded());
app.use(app.router);
app.use(express.static(path.join(__ dirname,'public')));
app.get('/',function(req,res){
res.render('index');
})
https.createServer(options,app).listen(8443);
所以我的问题是我只需要添加另一个 iptables
规则?或者我需要在我的应用程序中配置一些东西?
所以基于以下一个答案,我不认为它是一个中间件问题,而是一个端口问题。例如:如果我转到 http://my-example-domain.com ,则不起作用。但是如果添加端口8443, http://my-example-domain.com:8443 ,
var redirectApp = express(),
redirectServer = http.createServer(redirectApp);
redirectApp.use(function requireHTTPS(req,res,next){
if(!req.secure){
return res.redirect('https://'+ req.headers.host + req.url);
}
next();
})
redirectServer.listen(8080);
I'm trying to reroute http (80)
to https (443)
in my express app. I'm using some middle ware to do this. If i go to my https://my-example-domain.com
, everything is fine. But if I go to http://my-example-domain.com
it does not redirect and nothing shows up.
I also have setup some iptables on my ubuntu server
sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
function requireHTTPS(req, res, next) {
if (!req.secure) {
return res.redirect('https://' + req.headers.host + req.url);
}
next();
}
// all environments
app.set('port', process.env.PORT || 8443);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.logger('dev'));
app.use(requireHTTPS); // redirect to https
app.use(express.json());
app.use(express.urlencoded());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function(req, res){
res.render('index');
})
https.createServer(options, app).listen(8443);
So my question is do I just need to add another iptables
rule? Or do I need to configure something in my app?
So based on one answer below, I don't think its a middleware problem, but a port issue. For example: if i go to http://my-example-domain.com, doesn't work. But if I add port 8443,http://my-example-domain.com:8443, it redirects fine.
var redirectApp = express () ,
redirectServer = http.createServer(redirectApp);
redirectApp.use(function requireHTTPS(req, res, next) {
if (!req.secure) {
return res.redirect('https://' + req.headers.host + req.url);
}
next();
})
redirectServer.listen(8080);
这篇关于将http重定向到https express.js的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!