NGINX: Como proxy tráfego http (s) para um servidor e ws (s) tráfego para outro?

2

Eu sou novo no nginx e como ele lida com locatoins, e esperava obter ajuda para um problema que estou tendo:

No mesmo servidor, eu tenho um servidor web Apache e um servidor websocket. O Apache funciona na porta 8080 e o servidor websocket funciona em 9090. Eu gostaria de colocar um proxy nginx na frente para que o tráfego http / https seja proxied para o apache e o tráfego ws / wss seja proxied para o servidor websocket.

Eu tenho a seguinte configuração:

location /ws* {
    proxy_pass ws://127.0.0.1:9090;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

location / {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
}

Isso funciona bem, mas o problema que estou enfrentando é que todas as requisições ws * também são redirecionadas para o servidor apache, enquanto eu quero apenas que elas sejam redirecionadas para o servidor ws. Eu li que nginx leva apenas o primeiro local que corresponde, mas isso parece estar errado no meu caso.

Portanto, a questão é como eu faço proxy HTTP (S) tráfego SOMENTE para apache e ws (s) tráfego apenas para o servidor de socket web?

    
por Mita Ka 22.09.2014 / 17:19

1 resposta

1

A sintaxe de localização que você tem não parece ser o que você está tentando fazer.

Se você está tentando fazer o regex com o URL do local, a sintaxe correta é:

location ~ /ws.* {

Se você está tentando fazer tudo sob o diretório ws, você deve ter:

location /ws/ {

Você pode querer revisar a documentação para obter mais informações sobre localização. link

    
por 22.09.2014 / 18:17