>운영 및 유지보수 >엔진스 >Nginx의 소켓 전달 포트를 구성하는 방법

Nginx의 소켓 전달 포트를 구성하는 방법

PHPz
PHPz앞으로
2023-05-24 11:37:062567검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제