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
웹소켓이 아닌 요청의 경우 비어 있기 때문입니다.