Proxying websocket (to e.g. tomcat)

Valentin V. Bartenev vbart at nginx.com
Thu Feb 21 16:03:52 UTC 2013


On Thursday 21 February 2013 19:55:45 Nikolai Zhubr wrote:
> 21.02.2013 18:30, Valentin V. Bartenev wrote:
> [...]
> 
> > Yes, it's possible with 1.3.13. And yes, you need some additional
> > configuration.
> > 
> > Example:
> >      location /examples/websocket {
> >      
> >          proxy_pass  http://127.0.0.1:8080;
> >          proxy_http_version 1.1;
> >          proxy_set_header Upgrade $http_upgrade;
> >          proxy_set_header Connection "upgrade";
> >      
> >      }
> 
> Ah, this indeed helped! Now it works. Thank you very much.
> 
> Apparently such configuration implies that different kinds of
> connections (standard and websocket) can not be mixed in one "location"
> section? (As far as I understood it, magic headers do not get through
> directly, but essentially get reintroduced by these configuration
> settings?)
> 

Not quite so. Actually, they can be mixed. That's why the $http_upgrade variable 
used. If there's no such header in request, then the variable is empty and the 
header won't be set.

You can also set the Connection header to different values depending on 
existence of the Upagrade header in a request.

Example:

  http {
      map $http_upgrade $conn_header {
          default        upgrade;
          ''             close;
      }

      server {
          ...

          location {
              proxy_pass  http://127.0.0.1:8080;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection $conn_header;
          }
      }

http://nginx.org/r/map


  wbr, Valentin V. Bartenev

--
http://nginx.com/support.html
http://nginx.org/en/donation.html



More information about the nginx mailing list