Nginx 서버 의 Websockets 설정 방법 소개
문서 에서 언급 한 설정 은 다음 과 같 습 니 다.http://nginx.org/en/docs/http/websocket.html)
location /chat/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
이 설정 은 확실히 상당히 간단 합 니 다. HTTP 를 설정 한 버 전 까지 이전 버 전에 서 지원 합 니 다. 우 리 는 설정 을 약간 최적화 할 수 있 습 니 다. 링크 를 만 드 는 변 수 를 통 해 proxyset_headers 는 공통 적 으로 포 함 된 파일 에 넣 어서 유 니 버 설 을 향상 시 킵 니 다.
map $http_connection $upgrade_requested {
default upgrade;
'' close;
}
이렇게 하면 변수 $upgrade요청 은 proxyset_header Connection 에서 사용 되 며, upgrade 의 링크 요청 이 없 으 면 Conection 이 머리 는 "" 로 설정 되 어 일반적인 요청 에 방해 가 되 지 않 습 니 다. 이렇게 하면 웹 소켓 을 처리 하기 위해 HTTP / 1.1 프 록 시 만 사용 할 필요 가 없다 는 장점 이 있 습 니 다.
링크 업 그 레이 드 는 안정 적 인 버 전 으로 옮 겨 지지 않 은 것 같 습 니 다. 따라서 링크 업그레이드 기능 을 사용 하려 면 개발 버 전 을 사용 해 야 합 니 다.고 마운 것 은 nginx 의 개발 버 전 은 안정 판 을 실행 하 는 것 이 아니 라 API 가 변 한 다 는 것 을 의미 합 니 다. 이 경우 모듈 의 작성 자 에 게 만 영향 을 줄 수 있 습 니 다.개발 버 전 을 설치 하 는 것 을 두려워 하지 말고 이 새로운 특징 을 시도 해 보 세 요.
한계 성:
지금까지 웹 소켓 의 실행 배치 에 한계 가 있 었 습 니 다.
클 라 이언 트 는 링크 업 그 레이 드 를 제정 해 야 합 니 다.
클 라 이언 트 가 링크 업 그 레이 드 를 요청 해 야 합 니 다. 그렇지 않 으 면 nginx 가 실패 합 니 다.현재 이 요 구 는 코드 에서 해 야 할 부분 으로 열거 되 어 있 기 때문에 나 는 그것 이 어떻게 실 패 했 는 지 말 해 야 한다. 그러나 나 는 그것 이 마지막 에 실 행 될 것 이 라 고 확신 할 수 있다. 그래서 나 는 그것 에 의존 할 필요 가 없다.이 제약 은 누구 에 게 나 문제 가 되 지 않 습 니 다. 모듈 의 작성 자가 연결 을 백 엔 드 로 업그레이드 하고 자체 적 으로 응답 을 처리 하 는 상황 에서 만 문제 가 될 수 있 습 니 다.
WebSockets 시간 초과 WebSockets 는 여전히 60 초 로 결 성 된 proxyread_timeout 의 영향.웹 소켓 을 사용 하 는 프로그램 이 있 지만 60 초 이상 데 이 터 를 보 내지 않 을 수도 있다 면 시간 초과 시간 을 늘 리 거나 핑 메 시 지 를 통 해 연락 을 유지 해 야 한 다 는 뜻 이다.ping 을 사용 하 는 해결 방법 은 추가 적 인 장점 이 있 습 니 다. 연결 이 의외로 닫 혔 는 지 확인 할 수 있 습 니 다.
Keep - alive & WebSockets Keep - alive pings 는 상기 시간 초과 문제 에 대해 무효 입 니 다. TCP 단계 에서 빈 가방 만 보 내기 때 문 입 니 다.프로그램 에 보고 하지 않 기 때문에 프로그램 도 응답 하지 않 기 때문에 proxyread_timeout 은 여전히 촉발 합 니 다.
WebSockets 는 SSL 을 지원 합 니 다. WebSockets 는 정상 적 인 프 록 시 모듈 에 연결 되 어 있 기 때문에 SSL 은 평소 대로 작 동 합 니 다.
프 록 시 캐 시 WebSockets 는 두 개의 메모리 버퍼 를 이용 하여 프 록 시 캐 시 설정 (proxy buffer size) 의 크기 를 실현 합 니 다. 하 나 는 상행 데이터 에 사용 되 고 다른 하 나 는 하행 데이터 에 사 용 됩 니 다.웹 소켓 은 일반적인 프 록 시 요청 과 달리 웹 소켓 은 데 이 터 를 디스크 에 캐 시 하지 않 습 니 다.
대소 문자 가 민감 한 업그레이드 헤드 에는 일부 백 엔 드 프로그램 이 업그레이드 헤드 에 대해 대소 문자 검 사 를 하면 서 'upgrade' 와 'Upgrade' 두 가지 표기 법 을 지원 한다. 그렇지 않 으 면 'upgrade' 표기 법 만 정상적으로 작 동 할 수 있다.설정 이 모두 정확 해 보인다 면 제대로 작 동 하지 않 는 다 면 머리의 대소 문 자 를 수정 해 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.