2013-05-12 2 views
8

웹 소켓도 node-http-proxy과 작동하도록하려고합니다.프록시 테이블과 웹 소켓이있는 노드 http 프록시

var options = { 
router: { 
    'a.websterten.com': '127.0.0.1:150', 
    'b.websterten.com' : '127.0.0.1:151', 
} 
}; 

var server = httpProxy.createServer(options); 

내가 시도 :

server.on('upgrade', function (req, socket, head) { 
    server.proxy.proxyWebSocketRequest(req, socket, head); 
}); 

을하지만 작동하지 않는 것 차이가 나는 proxytable을 사용하고있다. (내가 직접 갈 경우 잘 작동) 빠른 검사는

또한 server.on('upgrade',..

는 어떻게 얻을 수있는 웹 소켓 요청에 발생하지 않는 검사의 몇 일 WebSocket을 작업 내가 크롬에서 Unexpected response code: 400를 얻을 보여줍니다 여부를 확인하기 위해 내 프록시 서버가 웹 소켓을 올바르게 라우팅합니까?

는 또한 노드 0.8.23뿐만 아니라 노드 0.10.x (노드의 최신 버전은 메모리 누수 문제가 있지만, 습관 중 하나 0.8.23 작업)

답변

2

때를에 시도했습니다 httpProxy.createServer()을 사용하면 http 프록시가 자동으로 처리하므로 upgrade 이벤트를 처리 할 필요가 없습니다. 따라서 http 프록시가 이미 내부적으로 처리 중이므로 server.on('upgrade', ...)이 실행되지 않습니다.

server.on('upgrade')을 수행해야하는 유일한시기는 미들웨어 기능을 httpProxy.createServer으로 전달하거나 http.createServer()으로 수동으로 서버를 생성 한 경우입니다.

즉, 웹 소켓은 구성에서 프록시를 통해 "제대로 작동"해야합니다.


그러나, HTTP 프록시에 웹 소켓 지원 때문에 streams2 (노드 코어 were completely rewritten in 0.10의 스트림의 API)의 currently broken on node v0.10.x이다. 또한 streams2 문제의 경우 botched fix이므로 http-proxy (0.10.2)의 최신 릴리스가 노드 v0.8에서 손상되었습니다. HTTP 프록시의 내부를 다시 할 streams2에 대처하기위한

  1. 기다립니다 :

    그래서 두 가지 옵션이 있습니다.

  2. 노드 v0.8.23 및 http-proxy 0.10.1로 다운 그레이드하십시오. (최소 1 일이 될 때까지.)

(당신은 npm install [email protected]를 실행하여 NPM 모듈의 이전 버전을 설치할 수 있습니다.)

+0

가 나는 오류를 얻을 심지어 해달라고로하고 업그레이드 아무 일도 발생하지 않고,이 시도 결국에는 충돌합니다. 나는 프록시 테이블 예제를 사용 중이고 다른 것들에 대한 호스트 이름을 수정했습니다. – Akshat

+0

@Akshat : 추가 연구에 따르면 실제로 노드 0.10과 호환되지 않습니다. 업데이트를 참조하십시오. – josh3736

+0

나는 또한 최신 업데이트로 0.8.2의 문제가 발생했습니다. 이 문제에 대한 해결 방법이 있습니까? – Akshat