nginx 소켓 포트 전달에 대한 일반적인 시나리오: 온라인 학습 애플리케이션은 일반 기능 외에 채팅방 기능을 추가합니다. 동시에 프런트엔드가 서비스에 직접 연결하기를 원하지 않는 경우 백엔드가 swoole을 선택합니다. ip:port, nginx를 사용하여 전달해야 합니다.
일반적인 상황에서는 사용자 페이지에 소켓 링크를 직접 설정할 수 있지만 이러한 작업은 포트를 노출시키고 전달을 위해 nginx를 사용하면 포트가 숨겨질 수 있습니다. 추가적인 문제는 일부 헤더 매개변수도 전달 프로세스 중에 소켓 서비스 제공자에게 가져와야 한다는 것입니다. 다른 매개변수는 일반 프로토콜에서 웹소켓으로의 변환을 처리하기 위해 nginx만 필요합니다.
그 중 "업그레이드"는 hop-by-hop 헤더이므로 클라이언트에서 프록시 서버로 전달할 수 없습니다. 전달 프록시를 통해 클라이언트는 연결 방법을 사용하여 이 문제를 피할 수 있습니다. 그러나 클라이언트는 프록시 서버를 인식하지 못하고 프록시 서버에서 특별한 처리가 필요하므로 역방향 프록시에서는 작동하지 않습니다. 동시에 "upgrade" 및 "connection"이 포함된 hop-by-hop 헤더를 전달할 수 없으므로 websocket으로 변환할 때 다음 두 매개변수를 가져와야 합니다. 예:
location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header upgrade $http_upgrade; proxy_set_header connection "upgrade"; }
Advanced: "connection" 전달 프록시 서버에 대한 헤더 필드 값은 클라이언트 요청 헤더의 "업그레이드" 필드 값에 따라 달라집니다. 예:
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { ... location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header upgrade $http_upgrade; proxy_set_header connection $connection_upgrade; } }
참고: 예제의 http://backend는 로드 밸런싱된 서버 그룹입니다. 서버가 하나만 있는 경우 다음과 같이 Proxy_pass http://127.0.0.1:9501; 이것. 또한 기본적으로 60초 이내에 데이터를 전달하지 않는 링크는 닫히며, 이는 proxy_read_timeout 지시어를 사용하여 확장할 수 있습니다. 또는 시간 제한을 재설정하고 링크가 사용 가능한지 확인하기 위해 주기적으로 ping 프레임을 보내도록 프록시 서버를 구성할 수 있습니다.
위 내용은 Nginx의 소켓 전달 포트를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!