NGINX가 역방향 프록시에서 웹소켓 연결을 자동으로 업그레이드하도록 합니다.

NGINX가 역방향 프록시에서 웹소켓 연결을 자동으로 업그레이드하도록 합니다.

NGINX 역방향 프록시 뒤에 배치할 여러 서비스가 있는데, 이는 설정이 충분히 간단했지만 웹소켓에 문제가 발생했습니다. 단일 엔드포인트는 다음을 포함하는 위치를 지정하기에 충분히 간단합니다.

   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";

문제는 웹소켓이 있는 엔드포인트가 많다는 것입니다. 그리고 우리가 알지 못했던 또 다른 웹소켓 엔드포인트가 있기 때문에 작동하지 않는 새로운 것을 계속해서 찾습니다.

클라이언트가 이를 전달하는 경우 에만 Upgrade및 헤더를 설정하는 방법이 있습니까 ? Connection전체 서비스에 대해 이 두 줄을 포함하면 업그레이드를 시도합니다.모든웹소켓뿐만 아니라 연결도 가능합니다.

답변1

방금 같은 문제가 있었고 nginx 구성의 if 문과 싸우고 있었고 다음 지시문을 깨달았습니다.

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

아무것도 하지 마세요~하지 않는 한클라이언트가 Upgrade헤더를 설정했습니다.

따라서 각 웹소켓 엔드포인트에 특정 지시문을 추가하는 대신 Location전역 지시문을 만들 수 있습니다.

server {
  listen          443 ssl;
  server_name     my-server.example
  location / {
    proxy_pass http://local-service.example/;
    proxy_http_version 1.1;
    proxy_read_timeout 86400s;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

  }
}

이 프록시는 모든 HTTP 요청이며 웹소켓이 전체 네임스페이스에 대해 작동하도록 만듭니다. 작동하는 이유는 $http_upgrade웹소켓이 아닌 요청의 경우 비어 있기 때문입니다.

관련 정보