2014-01-24 2 views
0

도메인 foo.com에서 heroku node.js 앱을 실행하고 있습니다. foo.com/bar/로 시작하는 모든 url을 두 번째 node.js 프로세스로 프록시하고 싶습니다. 그러나 동일한 heroku 앱 내에서 프로세스를 제어하기를 원합니다. 이것이 가능한가?heroku : 두 번째 node.js 앱으로 하위 디렉토리 라우팅?

그렇지 않은 경우 두 번째 heroku 앱에 하위 디렉토리를 프록시 처리 할 수 ​​있습니까? 나는 웹 애플 리케이션의 진입 점 밖에서 라우팅하는 방법에 대해 많은 제어를 찾을 수 없었습니다. 즉, 예를 들어 Express를 사용하여 node.js 내의 라우팅을 쉽게 제어 할 수 있지만 다른 응용 프로그램에 프록시를 허용하지 않습니다.

마지막 수단은 단순히 하위 디렉토리 대신 하위 도메인을 사용하는 것이지만 하위 디렉토리가 먼저 가능한지 알고 싶습니다. 감사!

편집 : http-proxy를 사용하여 문제를 해결해야했습니다. 두 개의 익스프레스 서버가 서로 다른 포트에서 수신 대기 한 다음 외부에있는 세 번째 서버가 URL에 따라 둘 중 하나로 라우팅합니다. 물론 이상적은 아니지만 일할 다른 것을 얻을 수는 없습니다. 아래에 설명 된 wrap-app2 접근법에는 알아낼 수없는 몇 가지 URL 문제가있었습니다. 원하는 경로로 요청 때

답변

0

그냥 새로운 표현 서버를 생성하고 이차로 리디렉션 메인 하나에 미들웨어를 넣어 :

var app2 = express(); 

    app2.use(function(req, res){ 
     res.send('Hey, I\'m another express server'); 
    }); 

    app.use('/foo', app2); 

내가 Heroku가 아직 그것을 시도하지 않은,하지만 그것은 동일한 프로세스이며 새로운 TCP 바인딩이나 프로세스를 생성하지 않으므로 작동합니다. 참고로 a modified plain express template.

다른 표현 프로세스가 연결을 처리하려는 경우 클러스터를 사용해야합니다. worker.send utility을 확인하십시오.

app.use('/foo', function(req,res){ 
     //You can send req too if you want. 
     worker.send('foo', res); 
    }); 
+0

app2에 의해 처리 될 때 경로가 복제되는 이상한 동작으로 인해 실제로 작동하지 않았습니다. 정확하게 동작을 기억할 수는 없지만, app2는 '/ foo/...'대신 '/ foo/foo/...'와 같은 URL을 보게됩니다. –

0

가능합니다. 내가 생각할 수있는 가장 우아한 방법은 클러스터링을 사용하는 것입니다. 1 Heroku Dyno에는 4 개의 코어가 있습니다. 따라서 네 개의 작업자 스레드를 노드 프로세스에 실행할 수 있습니다.

여기에 introduction to clustering입니다.

두 개의 표현식을 초기화하는 것은 표현식을 사용한다고 가정하고 두 작업자 스레드에서이 두 표현식을 제공하는 것입니다.

if (cluster.isMaster) { 
    // let's make four child processes 
    for (var i = 0; i < 4; i++) { 
     if (i%2 == 0) { 
      cluster.fork(envForApp1); 
     } else { 
      cluster.fork(envForApp2); 
     } 
    } 
} else { 
    // refer to NODE_ENV and see whether this should be your app1 or app2 
    // which should be started. This is passed from the fork() before. 

    app.listen(8080); 
}