2011-08-24 2 views
3

request가 express와 함께 node.js에서 HTTPS를 사용하는지 확인하는 방법이 있습니까? 내가 Heroku를 사용하고있어 자신의 certs로드 균형 조정기 및 개별 웹 서버/인스턴스에 설치되어 있다고 가정합니다.express.js 처리기에서 HTTPS를 사용하고 있는지 확인할 수 있습니까?

+0

좋아, 그것은 http://stackoverflow.com/questions/8152651/how-can-i-check-that-a-request-is-coming-over이 다른 질문에 대답했다 -https-in-express – MonkeyBonkey

답변

0

당신의 nginx를 구성 할 경우, 다른 처리기에 대한 코드 그것에 대한 확인 및 설정 플래그의 nginx 설정에서 다음

proxy_set_header X-Forwarded-Proto https; 

그리고이 매개 변수를 추가합니다.

mainapp.use(function(req, res) { 

    if (req.header('X-Forwaded-Proto') == 'https') { 
    req.is_ssl = true; 
    } 
}); 
+0

Heroku를 사용하여 실제로 솔루션으로 작동했습니다. – MonkeyBonkey

0

Express에는 http 및 https 서버에 대해 다른 구성이 있습니다. 같은 앱에서 둘 다 듣고 있습니까? 아니면 그냥 하나 듣고?

당신은 당신이 동일한 파일에서 모두 제공하려면 응용 프로그램 = HTTP 및 APP2 = HTTPS 뭔가를 설정할 수 각 서버 유형 http://expressjs.com/guide.html

를 설정하는 방법에 대한 익스프레스 가이드를 확인할 수 있습니다.

app.get ('/ server', function (req, res) {console.log ('http request')})); app2.get ('/ server', function (req, res) {console.log ('https 요청')});

+0

동일한 앱에서 둘 다 듣고 있지만 인증서가로드 밸런서에 설치되어 있으므로 https 서버에 별도의 앱을 설정하지 않습니다. 따라서 SSL을 사용하여 "free"를 얻으므로 app.get http 메소드에 대한 https 요청이 여전히 작동합니다. 함수에서 요청을 검토하여 요청이 https를 통해 요청되었는지 확인해야합니다. – MonkeyBonkey

+0

console.log (req)를 사용하고 요청이 콘솔에 인쇄 될 때이를 검사하십시오. 필요한 값을 찾아 req 변수를 통해 사용할 수 있습니다. 즉. req.headers –

+0

Chris 안녕하세요, 불행히도 heroku에서 오는 req 객체에서 https를 사용하는지 여부를 나타내는 항목이 표시되지 않습니다. 내가 본 유일한 후보는 "remotePort"입니다.하지만 heroku가 443 이외의 다른 포트에 동적으로 매핑 된 것 같아서 신뢰할만한 것으로 보이지 않습니다. 특정 부동산에 대해 생각하고 있었습니까? – MonkeyBonkey

0

여기 같은 것이 nginx는 내 경우에 ssl을 처리하므로 정보 클라이언트 측을 잡아야합니다. 첫 페이지로드시 프로토콜을 추출하여 노드 async로 보냅니다. 신뢰할 수있는 솔루션이 될 수 있지만, 생산에 놀라 울 정도로 잘 작동하지 않을

console.log(location.href.split('://')[0]); 

생각.

아직 서버 측 솔루션을 찾으셨습니까?

+0

안타깝게도 클라이언트 측 스크립트를 실행할 수 없기 때문에 나머지 API 서비스가 있습니다. 나는 계속 찾아보고 내가 찾으면 알려주지. – MonkeyBonkey

관련 문제