WebSocket은 서버와 클라이언트 간의 실시간, 지속적인 양방향 통신을 허용하는 TCP 기반의 이중 단체 통신 프로토콜입니다. 이 기능을 사용하면 라이브 채팅, 실시간 데이터 푸시 및 기타 시나리오에 매우 적합합니다. 실제 배포에서 Nginx는 일반적으로 WebSocket 연결 요청을 전달하고 관리하기 위해 리버스 프록시 서버로 사용해야합니다.
먼저 서버 환경에 Nginx가 올바르게 설치되어 있는지 확인하십시오. 설치되지 않은 경우 해당 설치 명령을 실행하여 운영 체제에 따라 배포를 완료 할 수 있습니다.
Nginx를 지원하려면 WebSocket을 지원하려면 구성 파일을 조정해야합니다. 다음은 HTTP 모듈에 추가 된 구성의 예입니다.
지도 $ http_upgrade $ connection_upgrade { 기본 업그레이드; '' 닫다; } 상류 백엔드 { 서버 127.0.0.1:8080; }
이 구성의 목적은 후속 프록시 사용을 위해 클라이언트 요청 헤더의 업그레이드 필드를 사용자 정의 변수 $ $ connection_upgrade 에 매핑하는 것입니다. 동시에 Backend 라는 이름의 업스트림 서버가 정의되어 로컬 포트 8080을 가리 킵니다.
일치하는 경로에 대한 WebSocket 요청을 처리하려면 서버 블록에 다음 위치 구성을 추가하십시오.
위치 /웹 소켓 { proxy_pass http : // 백엔드; proxy_http_version 1.1; proxy_set_header 업그레이드 $ http_upgrade; proxy_set_header 연결 $ connection_upgrade; }
이 구성은 프록시 경로, 전달 주소를 지정하고 필요한 요청 헤더 필드를 설정하여 WebSocket 연결을 성공적으로 파악할 수 있도록하는 데 사용됩니다.
구성 파일을 수정 한 후 파일을 저장하고 닫은 다음 명령 줄에서 nginx 서비스를 다시 시작하여 구성을 적용하도록합니다.
Sudo Service Nginx 재시작
WebSocket 클라이언트 도구를 사용하거나 간단한 웹 페이지를 만들어 WebSocket 연결이 유효한지 테스트 할 수 있습니다. 다음은 기본 예입니다.
var ws = new WebSocket ( "ws : // your_domain/websocket"); ws.onopen = function () { Console.log ( "WebSocket에 연결"); }; ws.onmessage = function (이벤트) { Console.log ( "수신 된 메시지 :" + event.data); }; ws.onclose = function () { Console.log ( "WebSocket에서 분리 된"); };
위의 코드를 HTML 파일로 저장하고 브라우저에서 엽니 다. 개발자 도구에서 성공적인 연결을위한 프롬프트가 표시되면 구성이 성공적입니다.
Nginx의 프록시 함수를 구성함으로써 백엔드 응용 프로그램을위한 WebSocket 프로토콜을 지원할 수 있습니다. 이 방법은 통신 효율성을 향상시킬뿐만 아니라 NGINX의 고성능 및 보안 특성을 통해 전체 시스템을보다 안정적이고 확장 가능하게 만듭니다. NGINX 자체는 WebSocket 프로토콜을 처리하지 않고 중간 프록시로만 작용하며 처리를 위해 백엔드 응용 프로그램에 연결을 전달합니다. 보다 복잡한 WebSocket 서비스 로직을 구현 해야하는 경우 처리를 위해 전용 백엔드 WebSocket 서버를 사용하는 것이 좋습니다.