2012-07-14 3 views
2

Node.js 서버 (Expressjs 프레임 워크)에서 HTTPS를 구현하려고합니다.ExpressJS 노드 HTTPS 서버에서 Heroku 오류 H13

if(process.env.NODE_ENV == 'production'){ 
    var app = module.exports = express.createServer({ 
    key: fs.readFileSync('./ssl/nopass_server.key'), 
    cert: fs.readFileSync('./ssl/server.crt') 
    }); 
} else { 
    var app = module.exports = express.createServer({ 
    key: fs.readFileSync('./ssl/self_signed/nopass_server.key'), 
    cert: fs.readFileSync('./ssl/self_signed/server.crt') 
    }); 
} 

내가 Heroku가에도 설치 SSL 엔드 포인트를했습니다 : 내 서명 인증서 및 키뿐만 아니라, 테스트/개발을위한 자체 서명 된 인증서/키가 있습니다. 모든 게 localhost에서 정상적으로 작동하고 엔드 포인트가 제대로 작동하는 것 같지만 프로덕션 환경 (Heroku에서)에서 앱을 실행하면 H13 애플리케이션 오류가 발생합니다. 재미있게 (또는 안된다면) 내가 명시 적으로 HTTP 서버를 만들도록 말하면 : var app = module.exports = express.createServer()이 작동하지만 크롬은 the page at https://mydomain.com ran insecure content from http://mydomain.com이라고 불평합니다.

Express for Production에 HTTPS 서버를 만들지 않아도 될까요? 필요한 경우 Heroku에서 작동하도록 추가로 필요한 항목이 있습니까 (예 : var port = process.env.PORT으로 올바른 포트를 설정한다고 신뢰할 수 있음)? 그렇지 않은 경우 브라우저가 https 서버를 실행하지 않아도 브라우저가 불평하지 않는 경우 어떻게 "안전한"콘텐츠를 제공 할 수 있습니까?

나는이 아닌 HTTPS 요청을 돌볼 다음 사용하고 있습니다 :

이 현재 내 경로의 나머지 위에 있습니다
app.get('*',function(req,res,next){ 
    if(req.headers['x-forwarded-proto'] != 'https'){ 
    res.redirect('https://mydomain.com'+req.url); 
    } else next(); 
}); 

는, 이것이 문제가 될 수있다 /이 다른 곳에서해야 ?

저는 일반적으로 https에 대한 경험이 매우 부족하므로 분명히 분명하지 않습니다.

답변

6

Heroku의로드 밸런서에서 SSL 종료가 발생합니다. 그들은 앱이 일반 (비 SSL) 트래픽을 전송하므로 앱이 비 HTTPS 서버를 만들어야합니다. the page at https://mydomain.com ran insecure content from http://mydomain.com에 대해서는 모든 이미지/스크립트/etc. 귀하의 페이지는 https 프로토콜을 통해 사용됩니다.

+0

비 https입니다. 감사합니다. jquery-ui css 내의 일부가 서버에 코드를 호스팅하고 있었지만 경고를 발생시키는 것으로 나타났습니다. https google cdn에서 가져 오기 대신 경고가 표시됩니다. – hiattp

+0

여기에 간략하게 답변 됨 : http://stackoverflow.com/a/23894573/1882064 – arcseldon

0

app.enable('trust proxy') 다음으로 Heroku에서도 사용할 수있는 req.secure을 사용할 수 있습니다.