proxy - script - socket on event



nginx 1.2.0-socket.io-HTTP/1.1-프록시 websocket 연결 (2)

내 node-http-proxy 모듈을 nginx proxy_pass 모듈로 대체하고 싶습니다. 그것은 밖으로 읽을 수있는 HTTP / 1.1을 지원하는 새 nginx 버전을 릴리스 가능합니다. 나는 그 문제로 어려움을 겪고있는 몇몇 스레드가 웹 소켓이 nginx에 의해 지원되지 않는다는 것을 알았다.

내 경우에는 백그라운드에서 여러 개의 노드 프로젝트를 실행 중이며 도메인에 따라 포트 80에서 8000-8100으로 내 websocket 연결을 라우팅하려고합니다. tcp_module addon을 사용하지 않고 websocket 프록시 / 역방향 프록시를 수행 할 기본 방법이 있습니까?

proxy_passing을 사용하여 nginx.conf의 업스트림을 설정하려고했으나 websocket을 통해 포트 80에 연결하려고하면 502 게이트웨이 오류가 발생합니다.

같은 문제에 직면 한 사람이 있습니까? 누구든지 nginx + spcket.io, 포트 80을 통해 proxying에 대한 작업 예제가 있습니까?

https://src-bin.com


Answer #1

TCP 모듈이있는 NginX와 관련하여 내가 만난 몇 가지 문제가 있습니다. 하지만 가장 까다로운 하나는 EC2 인스턴스의 포트 80에서 nginx로 웹 소켓을 실행하려고합니다.

전체 구성은 here 설명되어 here


Answer #2

아닙니다. 아직 불가능합니다. nginx 1.2에는 실제로 HTTP / 1.1 역방향 프록시를 포함하는 1.1.x 개발 지점의 내용이 통합되어 있습니다. Websocket 연결은 HTTP / 1.1 "Upgrade"헤더를 사용하여 설정되지만, nginx가 이러한 종류의 헤더를 지원한다고해서 웹 소켓을 지원하지는 않습니다 (웹 소켓은 HTTP가 아닌 다른 프로토콜 임). (필자는 1.1.x 브랜치 (내 목적에 충분히 안정적인 것으로 나타남)를 사용하여 직접 시도했지만 tcp_module 없이는 작동하지 않습니다.

웹 소켓은 1.3.x에서 지원 될 것입니다 ( http://trac.nginx.org/nginx/roadmap ).

대안은 다음과 같습니다.

  • 계속해서 node-http-proxy를 사용하십시오.
  • TCP 모듈없이 nginx를 사용하십시오. socket.io는 웹 소켓을 사용하지 않고 다른 것을 사용합니다 (예 : 긴 폴링).
  • nginx와 tcp 모듈 :이 경우에는이 모듈에 대한 추가 포트가 필요하다고 생각합니다 (직접 시도하지 않았습니다)
  • 다른 것을 역방향 프록시로 앞에 놓으십시오. nginx 및 노드 앞에 HAProxy (웹 소켓을 지원함)를 사용합니다. 이제 Nginx는 단순히 프록시가 아닌 정적 파일 서버 역할을합니다. 추가 캐싱을 원하면 바니시가 또 다른 옵션입니다.