我有一个应用程序启动并运行在heroku上使用https表达节点.如何识别强制重定向到heroku上的nodejs的协议?
我的应用程序只是一个简单的http服务器,它(尚未)实现heroku发送它的https请求:
/* Heroku provides the port they want you on in this environment variable (hint: it's not 80) */
app.listen(process.env.PORT || 3000);
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个自签名证书,将其添加到Heroku,并在Heroku上配置了一个SSL端点,我记录heroku certs:info它似乎就在那里.
我正在Express上创建我的服务器,如下所示:
var server = require('http').createServer(app);
Run Code Online (Sandbox Code Playgroud)
然后重定向到https这样:
app.use(function(req, res, next) {
var reqType = req.headers["x-forwarded-proto"];
reqType == 'https' ? next() : res.redirect("https://" + req.headers.host + req.url);
});
Run Code Online (Sandbox Code Playgroud)
服务器运行正常,但我在SO上遇到了这个代码片段来创建一个https服务器:
var keys_dir = './sslcert/';
var server_options = {
key : fs.readFileSync(keys_dir + 'server.key'),
ca : fs.readFileSync(keys_dir + 'server.csr'),
cert : fs.readFileSync(keys_dir + 'server.crt')
}
var server = require('https').createServer(server_options,app);
Run Code Online (Sandbox Code Playgroud)
我没有像这个例子那样指向certs/keys,我的网站在https上运行(尽管锁是红色的,因为它是自签名的).
所以我的问题是,我的服务器如何知道我的密钥/证书,而没有我像代码片段那样明确地指向他们server_options?这是Heroku在幕后照顾的吗?
我在Heroku上设置的SSL端点如何与http我创建的服务器交互var server = require('http').createServer(app);?
编辑 …
我已经配置了我的SSL enpoint,我可以确认这是有效的.当我进入我的日志时,我看到以下内容:
Jul 13 08:14:10 support-dash app/web.1: Express server listening on port 17621
Jul 13 08:14:10 support-dash heroku/web.1: Stopping all processes with SIGTERM
Jul 13 08:14:11 support-dash heroku/web.1: State changed from starting to up
Jul 13 08:14:13 support-dash heroku/web.1: Process exited with status 143
Jul 13 08:15:48 support-dash heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/ host=app.supportdash.com fwd="68.63.87.85" dyno=web.1 connect=2ms service=30000ms status=503 bytes=0
Jul 13 08:16:18 support-dash heroku/router: at=error code=H12 desc="Request timeout" method=GET path=/favicon.ico host=app.supportdash.com fwd="68.63.87.85" dyno=web.1 connect=2ms service=30007ms status=503 bytes=0 …Run Code Online (Sandbox Code Playgroud)