我试图让我的应用程序在heroku上随处可见' https'。到目前为止应用程序是这样的:
"use strict";
console.log('working');
//Initial setup
var path, https, privateKey, certificate, port, cdjshelp, util, cookies, oauth, twitter, crypto, _, options, express, auth, lodash, dust, dustjs,
dustjsHelpers, commonDustjsHelpers, app, db, fs, mongoose, mongooseTimes, Comment, Bird, Sighting, Site, User,
Backbone, io;
//node modules, express and dust declarations
path = require('path');
util = require('util');
fs = require('fs');
https = require('https');
privateKey = fs.readFileSync('./config/privatekey.pem').toString();
certificate = fs.readFileSync('./config/certificate.pem').toString();
crypto = require('crypto');
//APP Defn...
app = require('./config/appSetup')(dustjs);
//******** SERVER CONFIG **********//
var port = process.env['PORT'] = process.env.PORT || 4000; // Used by https on localhost
options = {
key: privateKey,
cert: certificate
}
https.createServer(options, app).listen(port, function() {
console.log("Express server listening with https on port %d in %s mode", this.address().port, app.settings.env);
});
我已经使用openSSL CLI生成了privatekey.pem和certificate.pem并将它们作为选项加载。
我知道如果您使用DNS记录将应用程序提供给您自己的域,则heroku会有一个程序。我知道您必须完成列出的here程序。我没有重新映射任何网址或更改任何记录 - 我的网址是birdsapp.heroku.com。
Heroku使用搭载SSL,因此如果您设置了http服务器,您的应用将响应https请求而无需任何其他配置。问题是http路由仍然可用,所以我一直坚持设置https服务器 - 但是它在日志中没有任何时间,所以我认为存在问题使用SSL设置。
以上设置是否正确?这是在heroku上执行基本https服务器的最佳方式吗?
答案 0 :(得分:1)
好吧,它实际上比那简单得多......
您只需创建一个http服务器:
//******** SERVER CONFIG **********//
var port = process.env['PORT'] = process.env.PORT || 4000;
http.createServer(app).listen(port, function() {
console.log("Express server listening with http on port %d in %s mode", this.address().port, app.settings.env);
});
并添加路线重定向:
app.all('*', function(req, res, next) {
if (req.headers['x-forwarded-proto'] != 'https')
res.redirect('https://' + req.headers.host + req.url)
else
next() /* Continue to other routes if we're not redirecting */
});
heroku负责其余部分,设置一个http服务器,它是您的http服务器的镜像并使用他们的证书等。