글 / Nginx 운영

WebSocket용 Location 두 가지

WebSocket 전용 경로와 일반 요청을 함께 수신하는 경로는 Connection 헤더의 처리 방식이 다르다.

작성일 · 읽는 시간 1분

전용 경로

WebSocket만 수신하는 경로에서는 Connection을 고정값으로 지정해도 된다.

nginx
location /ws {
    proxy_pass http://127.0.0.1:5011;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

일반 요청 겸용 경로

같은 경로로 일반 페이지 요청도 수신한다면 고정값을 사용해서는 안 된다. 요청에 Upgrade 헤더가 있을 때만 upgrade를 전송하도록 map을 사용한다.

nginx/etc/nginx/nginx.conf
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
nginx
location / {
    proxy_pass http://127.0.0.1:5011;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

WebSocket 전용 경로와 겸용 경로의 Connection 헤더 처리 비교

공통 설정

proxy_http_version 1.1은 두 경우 모두 필요하다. 1.0에서는 연결을 WebSocket으로 전환(Upgrade)할 수 없다.