오늘, 현재 2014년 10월 10 , 사용 Heroku가 삼나무 스택 및 ExpressJS ~ 3.4.4 , 여기에 코드의 작업 집합이다.
여기서 기억해야 할 주요 사항은 Heroku에 배포하고 있다는 것입니다. SSL 종료는 암호화 된 트래픽이 노드 앱에 도달하기 전에로드 밸런서에서 발생합니다. req.headers [ 'x-forwarded-proto'] === 'https'를 사용하여 https를 사용하여 요청했는지 여부를 테스트 할 수 있습니다.
다른 환경에서 호스팅하는 경우처럼 앱 등 내부에 로컬 SSL 인증서를 갖는 것에 대해 걱정할 필요가 없습니다. 그러나 자체 인증서, 하위 도메인 등을 사용하는 경우 먼저 Heroku 추가 기능을 통해 SSL 추가 기능을 적용해야합니다.
그런 다음 다음을 추가하여 HTTPS가 아닌 다른 항목에서 HTTPS로 리디렉션합니다. 이것은 위에서 받아 들여진 대답에 매우 가깝지만 다음과 같습니다.
- "app.use"를 사용하는지 확인합니다 (get뿐만 아니라 모든 작업에 대해)
- forceSsl 로직을 선언 된 함수로 명시 적으로 외부화합니다.
- "app.use"와 함께 '*'를 사용하지 않습니다. 실제로 테스트했을 때 실패했습니다.
- 여기서는 프로덕션에서 SSL 만 원합니다. (필요에 따라 변경)
암호:
var express = require('express'),
env = process.env.NODE_ENV || 'development';
var forceSsl = function (req, res, next) {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(['https://', req.get('Host'), req.url].join(''));
}
return next();
};
app.configure(function () {
if (env === 'production') {
app.use(forceSsl);
}
// other configurations etc for express go here...
}
SailsJS (0.10.x) 사용자를위한 참고 사항. api / policies 내에 정책 (enforceSsl.js)을 간단히 생성 할 수 있습니다.
module.exports = function (req, res, next) {
'use strict';
if ((req.headers['x-forwarded-proto'] !== 'https') && (process.env.NODE_ENV === 'production')) {
return res.redirect([
'https://',
req.get('Host'),
req.url
].join(''));
} else {
next();
}
};
그런 다음 config / policies.js에서 다른 정책과 함께 참조하십시오. 예 :
'*': [ '인증 됨', 'enforceSsl']
app.get('*',function(req,res,next){ if(req.headers['x-forwarded-proto']!='https') res.redirect('https://mypreferreddomain.com'+req.url) else next() })