[Redirect] Heroku NodeJS http https ssl 강제 리디렉션



Answers

대답은 Heroku가 전달하는 'x-forwarded-proto'의 헤더를 프록시 thingamabob처럼 사용하는 것입니다. (부가 메모 : 다른 x 변수도 함께 전달하므로 편리합니다.

내 코드 :

/* At the top, with other redirect methods before other routes */
app.get('*',function(req,res,next){
  if(req.headers['x-forwarded-proto']!='https')
    res.redirect('https://mypreferreddomain.com'+req.url)
  else
    next() /* Continue to other routes if we're not redirecting */
})

Brandon에게 감사드립니다. 6 시간의 지연 시간 만 기다려서 제 질문에 대답 할 수 없었습니다.

Question

나는 https가있는 노드에서 express로 heroku에서 실행되는 애플리케이션을 가지고있다. heroku에서 nodej를 사용하여 https로 리디렉션하도록하는 프로토콜을 어떻게 식별합니까?

내 응용 프로그램은 단지 간단한 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);



루프백 사용자는 약간의 수정 된 버전의 arcseldon 대답을 미들웨어로 사용할 수 있습니다.

server / middleware / forcessl.js

module.exports = function() {  
  return function forceSSL(req, res, next) {
    var FORCE_HTTPS = process.env.FORCE_HTTPS || false;
      if (req.headers['x-forwarded-proto'] !== 'https' && FORCE_HTTPS) {
        return res.redirect(['https://', req.get('Host'), req.url].join(''));
      }
      next();
    };
 };

server / server.js

var forceSSL = require('./middleware/forcessl.js');
app.use(forceSSL());






heroku와 함께 cloudflare.com을 CDN으로 사용하는 경우 다음과 같이 cloudflare에서 자동 SSL 리디렉션을 쉽게 사용할 수 있습니다.

  1. 로그인하고 대시 보드로 이동하십시오.

  2. 페이지 규칙 선택

  3. 도메인 (예 : www.example.com)을 추가하고 스위치에서 항상 https를 사용하십시오.



app.all('*',function(req,res,next){
  if(req.headers['x-forwarded-proto']!='https') {
    res.redirect(`https://${req.get('host')}`+req.url);
  } else {
    next(); /* Continue to other routes if we're not redirecting */
  }
});



Links